首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Keras model.evaluate()失败

Keras model.evaluate()失败
EN

Stack Overflow用户
提问于 2018-09-25 13:22:14
回答 1查看 805关注 0票数 0

我创建了一个看起来像这样的小ConvNet:

代码语言:javascript
复制
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'])

我正在用形状数据训练它

代码语言:javascript
复制
X_train.shape = (48000, 28, 28, 1)
X_val.shape = (12000, 28, 28, 1)

而且效果很好。

但是,现在我想使用keras.evaluate()函数测试模型:

代码语言:javascript
复制
score = trained_model.evaluate(X_test, y_test, batch_size=128)
# X_test.shape = (10000, 28, 28, 1)
# y_test.shape (10000,)

这将导致以下错误:

代码语言:javascript
复制
ValueError: Error when checking target: expected dense_2 to have shape (10,) but got array with shape (1,)

我不太理解这个错误,因为我在训练、验证和测试集中使用了相同的形状。

你能解释一下我的错误是什么,以及如何解决吗?

非常感谢!

编辑:trained_model.summary()的输出

代码语言:javascript
复制
_________________________________________________________________
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_trainy_valy_test数据的一个热点。解决办法:

代码语言:javascript
复制
from keras.utils.np_utils import to_categorical
y_train = to_categorical(y_train)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-25 13:54:20

错误说,目标(Y)的形状应该是一个热编码的形状,每个样本包含10个元素。您可以看到y_test的形状(10000,),它不是一个热编码。

你可以这样做:

代码语言:javascript
复制
y_test = kera.utils.np_utils.to_categorical(y_test)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52499274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档