Вход 0 слоя conv2d_6 несовместим со слоем: ожидаемый ndim = 4, найденный ndim = 3.Полная форма получена: [28, 28, 1] - PullRequest
0 голосов
/ 18 мая 2019

вот мой cnn
и получаю

model = cnn_model () print (model.call (train_data [0])) ValueError: Ввод 0 уровня conv2d_6 несовместим с уровнем: ожидаемый ndim = 4, найдено ndim = 3. Получена полная форма: [28, 28, 1]

и форма (28,28,1)

что не так?

input_shape = (28,28.1)
class cnn_model(tf.keras.Model):
    def __init__(self):

        super(cnn_model,self).__init__()
        self.conv1 = layers.Conv2D(32,(3,3),activation='relu',input_shape= input_shape)
        self.maxpool = layers.MaxPool2D((2,2))
        self.conv2 = layers.Conv2D(64,(3,3),activation ='relu')
        self.conv3 = layers.Conv2D(64,(3,3),activation='relu')
        self.flatten = layers.Flatten()
        self.dense64 = layers.Dense(64,activation='relu')
        self.dense10 = layers.Dense(10,activation='relu')
    def call(self,inputs):
        x = self.conv1(inputs)
        x = self.maxpool(x)
        x = self.conv2(x)
        x = self.maxpool(x)
        x = self.conv3(x)
        x = self.flatten(x)
        x = self.dense64(x)
        x = self.dense10(x)
        return x

1 Ответ

0 голосов
/ 12 июля 2019

Ваш input_shape параметр выглядит нормально, поэтому я предполагаю, что train_data[0] не имеет достаточных размеров! Вероятно, train_data.shape - это что-то вроде (N, H, W, C), которое готово войти в модель, однако train_data[0].shape будет похоже на (H, W, C), которое на одно измерение меньше, чем ожидалось. Если вы хотите подать один образец в модель, вам нужно изменить форму train_data[0] в (1, H, W, C), возможно, используя numpy's expand_dims .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...