Keras выводит сообщение об ошибке: (Ошибка при проверке ввода: ожидалось, что conv2d_4_input будет иметь 4 измерения) - PullRequest
1 голос
/ 13 июня 2019

Вот мой код, использующий сверточную нейронную сеть в наборе данных MNIST.К сожалению, Keras выдает ошибку при прохождении через сеть.Ваша помощь приветствуется.Я хотел бы знать причину таких ошибок.

Это ошибка: ошибка при проверке ввода: ожидалось, что conv2d_4_input имеет 4 измерения, но получил массив с формой (45000, 28, 28)

model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28,28, 1), padding= 'same'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu', padding= 'same'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(128, (3, 3), activation='relu', padding= 'same'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Flatten())
model.add(layers.Dropout(0.4))
model.add(layers.Dense(256, activation='relu'))
model.add(layers.Dense(10, activation='softmax'))
model.compile(optimizer='rmsprop',
loss='categorical_crossentropy',
metrics=['accuracy'])
k = 4
num_val_samples = len(train_images) // k
num_epochs = 20
all_scores = []
for i in range(k):
    print('processing fold #', i)
    valid_data = train_images[i * num_val_samples: (i + 1) *
                          num_val_samples] 
    valid_labels = train_labels[i * num_val_samples: (i + 1) *
                                num_val_samples]
partial_train_images = np.concatenate(
    [train_images[:i * num_val_samples], train_images[(i + 1) * num_val_samples:]], axis=0)
partial_train_labels = np.concatenate([train_labels[:i * num_val_samples], train_labels[(i + 1) * num_val_samples:]],axis=0)

model.fit(partial_train_images, partial_train_labels,epochs=20, 
batch_size=1, verbose=0)
val_mse, val_mae = model.evaluate(val_data, val_targets, verbose=0)
all_scores.append(val_mae)

Я видел другие страницыи ни одно из решений там не помогло.

1 Ответ

0 голосов
/ 13 июня 2019

Вы не включаете измерение каналов в свой массив, для изображений в градациях серого это должно быть измерение с одним элементом, поэтому каждый образец равен (28, 28, 1):

partial_train_images = partial_train_images.reshape((-1, 28, 28, 1))
val_data = val_data.reshape((-1, 28, 28, 1))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...