Нейронная сеть свертки ожидала X, но получила Y

#python #tensorflow #keras

#python #тензорный поток #keras

Вопрос:

Я делаю базовый CNN для распознавания рукописных цифр. Самый простой пример. И мои формулы должны быть в порядке, но код не складывается.

Сначала я обработал данные из MNIST

 (X_train, y_train), (X_test, y_test) = mnist.load_data()
X_train = X_train.reshape(60000,28,28,1)
X_train = X_train.astype('float32') / 255
X_test = X_test.reshape(10000,28,28,1)
X_test = X_test.astype('float32') / 255
X_train = to_categorical(X_train)
X_test = to_categorical(X_test)
  

Затем я начинаю создавать свой CNN так, чтобы слои и входные данные совпадали…

 small_ConvN_model = models.Sequential()
small_ConvN_model.add(layers.Conv2D(64, (3,3), activation='relu', input_shape=(28, 28, 1)))
small_ConvN_model.add(layers.Conv2D(32, (3,3), activation='relu', input_shape=(26, 26, 64)))
small_ConvN_model.add(layers.Flatten())
small_ConvN_model.add(layers.Dense(10, activation='softmax'))
small_ConvN_model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])
  

После добавления функции подгонки я получаю сообщение об ошибке

 Error when checking input: expected conv2d_51_input to have shape (28, 28, 1) but got array with shape (28, 28, 2)
  

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

Комментарии:

1. Пожалуйста, проверьте свой код в деталях, вы кодируете переменные X в одночасье, в то время как метки (переменные y) — это те, которые должны быть в одночасье закодированы.

2. @Dr.Snoopy Да … это сделало это …. изменил полученное значение с x на y, и теперь оно работает…… Спасибо….

Ответ №1:

Вы можете прокомментировать эту строку в своем коде :

 X_train = to_categorical(X_train)