Keras ValueError: вход 0 несовместим со слоем conv2d_1: ожидаемый ndim=4, найденный ndim=5

Я проверил все решения, но все еще сталкиваюсь с той же ошибкой. Моя форма тренировочных образов (26721, 32, 32, 1), я считаю, что это 4-мерное измерение, но я не знаю, почему ошибка показывает, что это 5-мерное измерение.

 model = Sequential()

 model.add(Convolution2D(16, 5, 5, border_mode='same',
                            input_shape= input_shape ))

Так вот как я определяю model.fit_generator

model.fit_generator(train_dataset, train_labels, nb_epoch=epochs, verbose=1,validation_data=(valid_dataset, valid_labels), nb_val_samples=valid_dataset.shape[0],callbacks=model_callbacks)

Может кто-нибудь, пожалуйста, помогите мне с этим?

6 ответов

Решение

Проблема в input_shape,

На самом деле он должен содержать только 3 измерения. А внутренне керас добавит размер партии, делая его 4.

Так как вы, вероятно, использовали input_shape с 4 размерами (в комплекте), керас добавляет 5-е.

Вы должны использовать input_shape=(32,32,1),

Проблема с input_shape, Попробуйте добавить дополнительное измерение / канал для уведомления keras о том, что вы работаете с изображением в градациях серого, т. Е. ->1

input_shape= (56,56,1), Вероятно, если вы используете обычную модель глубокого обучения, это не вызовет проблем, но для Convnet это действительно так.

Для изменения формы данных нам нужно добавить четвертое измерение, т.е. изменение с (6000,28,28) к (6000,28,28,1)

Мой код:

img_rows=x_train[0].shape[0]
img_cols=x_test[0].shape[1]

X_train=x_train.reshape(x_train.shape[0],img_rows,img_cols,1)

X_test=x_test.reshape(x_test.shape[0],img_rows,img_cols,1)


Input_shape=(img_rows,img_cols,**).  *->  I forgot to put 1 here.

У меня такая же проблема

Input 0 is incompatible with layer conv2d_4 : except ndim=4 ,found ndim=3

Я решил эту проблему, просто поместив значение в форму ввода

Input_shape=(img_rows,img_cols,1)#store the shape of single image.

С этим проблема решена

вы можете использовать :

train_dataset= train_dataset.reshape(-1,32,32,1)

и теперь вы можете использовать input_shape(32,32,1) в алгоритме.

Я столкнулся с той же проблемой

Вход 0 несовместим со слоем conv2d_4: кроме ndim=4, найдено ndim=3

Я решил эту проблему, просто поместив значение в форму ввода

Input_shape=(img_rows,img_cols,1)#store the shape of single image. .. & the problem is solved

Здесь вам нужно проверять "channels_first" всякий раз, когда CNN используется как 2d. Также измените форму train_data и тестовых данных как:

if K.image_data_format() == 'channels_first':   #check for channels_first
 train_img.reshape(train_img.shape[0],1,x,x)
 Input_shape=(1,x,x)                            #In your case x is 32
else:
 train_img.reshape(train_img.shape[0],x,x,1)
 Input_shape=(x,x,1)
Другие вопросы по тегам