我有一个 keras 模型(称为 model ) .

model.compile(loss='binary_crossentropy',
                  optimizer='adam',
                  metrics=['accuracy'])
    model.fit(X_train, Y_train, batch_size=batch_size, epochs=nb_epoch,
                  validation_data=(X_test, Y_test))
    score, acc = model.evaluate(X_test, Y_test,
                                    batch_size=batch_size)

from sklearn.metrics import accuracy_score
preds = model.predict_classes(X_test, verbose=0)
print('prediction  accuracy: ', accuracy_score(y_test, preds))

这里的问题是两个准确度分数是不同的 . 我不知道它是如何可能的,因为它们是基于相同的数据计算的 .

你能给我一些提示吗?

Update

此外,我在训练时看到 val_acc 与最后一步的 accuracy 有很大的不同 . 即使我使用相同的测试集进行培训和评估 .

model.fit(X_train, Y_train, batch_size=batch_size, epochs=nb_epoch, validation_data=(X_test, Y_test))

这是我的培训过程:

Epoch 16/20 16256/16256 [==============================] - 3s - loss: 0.1011 - acc: 0.9604 - val_loss: 0.1191 - val_acc: 0.9545 Epoch 17/20 16256/16256 [==============================] - 4s - loss: 0.0986 - acc: 0.9615 - val_loss: 0.1224 - val_acc: 0.9536 Epoch 18/20 16256/16256 [==============================] - 3s - loss: 0.0965 - acc: 0.9622 - val_loss: 0.1197 - val_acc: 0.9550 Epoch 19/20 16256/16256 [==============================] - 3s - loss: 0.0946 - acc: 0.9631 - val_loss: 0.1213 - val_acc: 0.9542 Epoch 20/20 16256/16256 [==============================] - 3s - loss: 0.0929 - acc: 0.9634 - val_loss: 0.1288 - val_acc: 0.9519

val_acc 达到0.95 .

但当我这样做时:

preds = model.predict_classes(X_test, verbose=0) print('prediction 8 accuracy: ', accuracy_score(test['Rating'], preds+1))

准确度分数仅为 0.68 .

我注意到 Y_testy_test 是相同的 Y_test = np_utils.to_categorical(y_test, nb_classes)