python - 当我使用 model.evaluate() 时,为什么训练数据的结果不同?
问题描述
我使用 keras 训练带有模型检查点的神经网络。这是模型摘要:
Model: "sequential_1"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense_7 (Dense) (None, 128) 2304
_________________________________________________________________
dropout_3 (Dropout) (None, 128) 0
_________________________________________________________________
dense_8 (Dense) (None, 64) 8256
_________________________________________________________________
dropout_4 (Dropout) (None, 64) 0
_________________________________________________________________
dense_9 (Dense) (None, 32) 2080
_________________________________________________________________
dropout_5 (Dropout) (None, 32) 0
_________________________________________________________________
dense_10 (Dense) (None, 16) 528
_________________________________________________________________
dense_11 (Dense) (None, 8) 136
_________________________________________________________________
dense_12 (Dense) (None, 4) 36
_________________________________________________________________
dense_13 (Dense) (None, 1) 5
=================================================================
Total params: 13,345
Trainable params: 13,345
Non-trainable params: 0
_________________________________________________________________
这是培训代码:
history = model.fit(
data['X_train_scaled'], data['y_train'],
validation_data=(data['X_val_scaled'], data['y_val']),
epochs=epochs,
batch_size=batch_size,
verbose=2,
callbacks=[checkpoint, early_stopping]
)
model.fit()
最佳模型在 epoch 27 之后保存。这是上次保存模型时的输出部分:
Epoch 00027: val_loss improved from 0.50037 to 0.49198, saving model to saved-model\best-model
16/16 - 0s - loss: 0.3800 - accuracy: 0.8792 - val_loss: 0.4920 - val_accuracy: 0.8627
当我使用 加载保存model.load_weights()
的模型,然后使用 对训练和验证数据评估模型时model.evaluate()
,我得到的验证数据结果完全相同。但是,训练数据的结果总是不同的。
代码:
model.load_weights('saved-model/best-model')
print(model.evaluate(data['X_train_scaled'], data['y_train'])) # Different results
print(model.evaluate(data['X_val_scaled'], data['y_val'])) # Same results
输出:
32/32 [==============================] - 0s 2ms/step - loss: 0.3284 - accuracy: 0.9222
[0.32835641503334045, 0.9221556782722473]
11/11 [==============================] - 0s 3ms/step - loss: 0.4920 - accuracy: 0.8627
[0.4919773042201996, 0.8626865744590759]
那么为什么model.evaluate()
训练数据给出的结果与model.fit()
输出不同呢?
解决方案
推荐阅读
- reactjs - Lambda 更改数据时未触发 React Amplify GraphQL 订阅
- vim - 错误 CocAction("extensionStats") 不起作用
- java - ItemCount 未更新
- javascript - 如何在编辑器内容更改时将ckeditor5内容发送到python烧瓶
- delphi - Delphi 中的注释会减慢执行时间吗?
- reactjs - useEffect 不验证布尔值以执行某些操作
- bigcommerce - 如何在 Bigcommerce 中更改 H1 标题(产品页面上的产品描述)的大小
- json - Json Schema if/then 没有按预期工作
- java - 无法使用 jdbc 驱动程序连接到 mysql
- oracle - PL/SQL 动态 SQL 在函数中带单引号