python - Keras model.evaluate() 失败
问题描述
我创建了一个看起来像这样的小 ConvNet:
model = Sequential()
optimizer = Adam()
model.add(Lambda(lambda x: x / 127.5 - 1., input_shape=(28, 28, 1)))
model.add(Convolution2D(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(NUM_CLASSES, activation='softmax'))
model.compile(optimizer=optimizer, loss=keras.losses.categorical_crossentropy, metrics=['accuracy'])
我正在用形状数据训练它
X_train.shape = (48000, 28, 28, 1)
X_val.shape = (12000, 28, 28, 1)
而且效果很好。
但是,我现在想使用keras.evaluate()
函数测试模型:
score = trained_model.evaluate(X_test, y_test, batch_size=128)
# X_test.shape = (10000, 28, 28, 1)
# y_test.shape (10000,)
这会导致以下错误:
ValueError: Error when checking target: expected dense_2 to have shape (10,) but got array with shape (1,)
我不太明白这个错误,因为我在训练、验证和测试集上使用了相同的形状。
您介意解释一下我的错误是什么,以及如何解决吗?
非常感谢!
编辑:输出trained_model.summary()
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
lambda_1 (Lambda) (None, 28, 28, 1) 0
_________________________________________________________________
conv2d_1 (Conv2D) (None, 26, 26, 64) 640
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 13, 13, 64) 0
_________________________________________________________________
dropout_1 (Dropout) (None, 13, 13, 64) 0
_________________________________________________________________
flatten_1 (Flatten) (None, 10816) 0
_________________________________________________________________
dense_1 (Dense) (None, 128) 1384576
_________________________________________________________________
dropout_2 (Dropout) (None, 128) 0
_________________________________________________________________
dense_2 (Dense) (None, 10) 1290
=================================================================
Total params: 1,386,506
Trainable params: 1,386,506
Non-trainable params: 0
评论中给出的解决方案
我忘记了一个热门的再来一次我的y_train
,y_val
和y_test
数据。解决了:
from keras.utils.np_utils import to_categorical
y_train = to_categorical(y_train)
解决方案
该错误表明目标(y)预计具有单热编码的形状,每个样本具有 10 个元素。您表明 y_test 具有形状 (10000,),它不是一次性编码的。
你可以这样做:
y_test = kera.utils.np_utils.to_categorical(y_test)
推荐阅读
- swift - dateformat 拼写格式 swift
- java - `groovyConsole` 无法在带有 java 8 的 Ubuntu 18.04 上启动,如何解决?
- yarnpkg - 如何正确删除纱线工作区?
- c# - 使用泛型作为返回类型和参数
- react-native - 导入文件时选项卡导航器不起作用
- mongodb - MongoDB从数组返回内部文档
- java - 当在java中为每个.class文件加载一个类时,为什么会创建单独的Class Type对象?
- android - 请确保您在类路径中有所需的依赖项:class com.google.android.gms.vision.barcode.Barcode
- cordova - 运行 android –livereload ERR_INVALID_RESPONSE
- c# - 在天蓝色函数中编译 c# 代码时的点网 dll 路径