keras: ValueError: вход 0 несовместим со сверточным слоем2d_11: ожидаемый ndim=4, найденный ndim=2
model.add(Convolution2D(64, 3, 3, border_mode='same', input_shape=(32, 32, 3)))
model.add(Activation('relu'))
model.add(Convolution2D(32, 3, 3))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Convolution2D(64, 3, 3, border_mode='same'))
model.add(Activation('relu'))
model.add(Convolution2D(64, 3, 3))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(10))
model.add(Activation('softmax'))
это ошибка
ValueError Traceback (most recent call last)
<ipython-input-21-a60216c72b54> in <module>()
----> 1 model.add(Convolution2D(64, 3, 3, border_mode='same', input_shape=(3, 32, 32)))
2 model.add(Activation('relu'))
3 model.add(Convolution2D(32, 3, 3))
4 model.add(Activation('relu'))
5 model.add(MaxPooling2D(pool_size=(2, 2)))
/home/pranshu_44/anaconda3/lib/python3.5/site-packages/keras/models.py in add(self, layer)
330 output_shapes=[self.outputs[0]._keras_shape])
331 else:
--> 332 output_tensor = layer(self.outputs[0])
333 if isinstance(output_tensor, list):
334 raise TypeError('All layers in a Sequential model '
/home/pranshu_44/anaconda3/lib/python3.5/site-packages/keras/engine/topology.py in __call__(self, x, mask)
527 # Raise exceptions in case the input is not compatible
528 # with the input_spec specified in the layer constructor.
--> 529 self.assert_input_compatibility(x)
530
531 # Collect input shapes to build layer.
/home/pranshu_44/anaconda3/lib/python3.5/site-packages/keras/engine/topology.py in assert_input_compatibility(self, input)
467 self.name + ': expected ndim=' +
468 str(spec.ndim) + ', found ndim=' +
--> 469 str(K.ndim(x)))
470 if spec.dtype is not None:
471 if K.dtype(x) != spec.dtype:
ValueError: Input 0 is incompatible with layer convolution2d_11: expected ndim=4, found ndim=2
я пытаюсь изобразить классификацию cifar 10, но я получаю эту ошибку в соответствии с документами do [ https://keras.io/layers/convolutional/][1] мой ответ правильный, но я не знаю, почему я получаю эту ошибку
- я должен использовать (Нет, 32,32,3) размеров
1 ответ
Слой Conv2D требует ввода 4 измерений, но, видимо, вы даете только 2. Но я уверен, что вы уже заметили это.
По приключениям в машинном обучении:
Формат данных, которые должны быть предоставлены, является [i, j, k, l], где i - количество обучающих выборок, j - высота изображения, k - вес, а l - номер канала.
Я незнаком с данными, которые вы используете, но значение для l (номер канала) должно быть:
[Для] изображения в оттенках серого l всегда будет равно 1 (если бы у нас было изображение RGB, оно было бы равно 3)
Так что в основном вам просто нужно:
import tensorflow as tf
tf.reshape(your_image_tensor, [-1, 28, 28, 1]) #For a grayscale image
tf.reshape(your_image_tensor, [-1, 28, 28, 3]) #For a RGB image
Внесение соответствующих изменений для вашего собственного кода. Если вы не хотите использовать tenorflow, я рекомендую вам прочитать это
Обновление: Вы также можете изменить форму массивов с помощью numpy.reshape(). Более подробно: https://docs.scipy.org/doc/numpy/reference/generated/numpy.reshape.html