python - 由于 numpy shape tensorflow,keras 无法训练模型
问题描述
我是新手,我正在尝试用 Keras 训练我的模型。我有 14 节课。
以下是我的训练和测试数据的形状:
print('train data shape:', X_train.shape)
print('one hot shape:', y_train.shape)
print('one hot shape:', y_test.shape)
print('Number of images in x_train', x_train.shape[0])
print('Number of images in x_test', x_test.shape[0])
输出:
train data shape: (77623, 28, 28, 1)
one hot shape: (77623, 14, 14)
one hot shape: (500, 14, 14)
Number of images in x_train 77623
Number of images in x_test 500
这是我的模型:
model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=input_shape))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(14, activation='softmax'))
model.compile(loss=keras.losses.categorical_crossentropy,
optimizer=keras.optimizers.Adadelta(),
metrics=['accuracy'])
print(model.summary())
型号总结:
Layer (type) Output Shape Param #
=================================================================
conv2d_58 (Conv2D) (None, 26, 26, 32) 320
_________________________________________________________________
conv2d_59 (Conv2D) (None, 24, 24, 64) 18496
_________________________________________________________________
max_pooling2d_27 (MaxPooling (None, 12, 12, 64) 0
_________________________________________________________________
dropout_53 (Dropout) (None, 12, 12, 64) 0
_________________________________________________________________
flatten_27 (Flatten) (None, 9216) 0
_________________________________________________________________
dense_52 (Dense) (None, 128) 1179776
_________________________________________________________________
dropout_54 (Dropout) (None, 128) 0
_________________________________________________________________
dense_53 (Dense) (None, 14) 1806
=================================================================
Total params: 1,200,398
Trainable params: 1,200,398
Non-trainable params: 0
_________________________________________________________________
这是对方法的调用fit
:
history = model.fit(X_train, y_train,
batch_size=batch_size,
epochs=epochs,
verbose=0,
validation_data=(X_test, y_test), callbacks=[TQDMNotebookCallback()])
但我收到此错误:
Error when checking target: expected dense_53 to have 2 dimensions, but got array with shape (77623, 14, 14)
解决方案
检查您的输出形状:它应该是(num_samples, classes)
,而不是(num_samples, 14, 14)
。
推荐阅读
- javascript - 在选择一个选项时不发送文本框值
- firebase - FireBase Ping 延迟
- python - 如何从 HTML 中的该属性中提取字符串?
- mysql - SELECT /*!N SQL_NO_CACHE */ * FROM `table` - 这是什么?
- heroku - 我无法让 libvips 在 heroku 上编译
- c# - SetActive 的反应不同
- ghc - 堆栈如何确定使用哪个 ghc?
- javascript - 不确定我对 React Redux 应用程序中特定部分的处理方法?
- html - HTML 元素颜色、颜色和宽度 CSS 属性不起作用
- java - Jetty 中的 JSR-356 javax websockets(嵌入式和非嵌入式)