Keras ValueError: ValueError: Error when checking target: expected dense_4 to have shape (None, 2) but got array with shape (2592, 1) Python3

匿名 (未验证) 提交于 2019-12-03 01:20:02

问题:

I am having an issue when trying to train my model in Keras 2.0.8, Python 3.6.1, and a Tensorflow Backend.

Error Message:

ValueError: Error when checking target: expected dense_4 to have shape (None, 2) but got array with shape (2592, 1)

X_train = numpy.swapaxes(X_train, 1, 3) X_test = numpy.swapaxes(X_test, 1, 3)  print("X_train shape: ") --> size = (2592, 1, 1366, 96) print("-----") print("X_test shape") --> size = (648, 1, 1366, 96) print("-----") print(Y_train.shape) --> size = (2592,) print("-----") print("Y_test shape") --> size = (648,) 

Relevant Code snippets:

K.set_image_dim_ordering('th') K.set_image_data_format('channels_first')  def create_model(weights_path=None):     model = Sequential()     model.add(Conv2D(32, kernel_size=(3, 3),activation='relu', padding="same", input_shape=(1, 1366, 96)))     model.add(Conv2D(64, (3, 3), activation='relu', dim_ordering="th"))     model.add(MaxPooling2D(pool_size=(2, 2)))     model.add(Flatten())     model.add(Dense(128, activation='relu'))     model.add(Dropout(0.1))     model.add(Dense(64, activation='relu'))     model.add(Dropout(0.1))     model.add(Dense(16, activation='relu'))     model.add(Dense(2, activation='softmax'))     if weights_path:         model.load_weights(weights_path)     return model  model = create_model() model.compile(loss=keras.losses.categorical_crossentropy,               optimizer=keras.optimizers.SGD(lr=0.01),               metrics=['accuracy']) history = model.fit(X_train, Y_train,       batch_size=32,       epochs=100,       verbose=1,       validation_data=(X_test, Y_test)) 

Line 142, where I call model.fit() is where I am getting this error

Things I have tried to fix this error Referenced these stack overflow posts:

I tried to reshape the Y_test and Y_train numpy arrays using the following code:

Y_train.reshape(2592, 2) Y_test.reshape(648, 2) 

However, I get the following error:

ValueError: cannot reshape array of size 2592 into shape (2592,2)

回答1:

As you are using the categorical_crossentropy loss, you have to use one-hot encoded labels. For this you can use the function to_categorical from keras.utils.np_utils

from keras.utils import np_utils y_train_onehot = np_utils.to_categorical(y_train) y_test_onehot = np_utils.to_categorical(y_test) 

Then use the one-hot encoded labels to train your model.



回答2:

It seems to me you need to change the last layer of the NN:

def create_model(weights_path=None):     model = Sequential()     model.add(Conv2D(32, kernel_size=(3, 3),activation='relu', padding="same", input_shape=(1, 1366, 96)))     model.add(Conv2D(64, (3, 3), activation='relu', dim_ordering="th"))     model.add(MaxPooling2D(pool_size=(2, 2)))     model.add(Flatten())     model.add(Dense(128, activation='relu'))     model.add(Dropout(0.1))     model.add(Dense(64, activation='relu'))     model.add(Dropout(0.1))     model.add(Dense(16, activation='relu'))     model.add(Dense(1, activation='sigmoid'))     if weights_path:         model.load_weights(weights_path)     return model 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!