#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)