Keras 给出的“Loss”值是什么意思?

数据挖掘 机器学习 神经网络 深度学习 喀拉斯
2022-02-27 01:47:47

我将我的神经网络设置为使用均方误差,如下所示。据我了解(并通过阅读文档),这意味着如果一行的正确结果是 0.7 并且网络预测为 0.8,则此条目对损失的贡献是 (0.8 - 0.7) 平方 = 0.01

from keras.models import Sequential
from keras.layers import Dense

#...build up neural network layers here...

net.compile(optimizer = 'adam', loss = 'mean_squared_error')
net.fit(training_data, training_results, batch_size = 4, epochs = 100)

我得到以下输出。

纪元 100/100 1190/1190 [===============================] - 0s 133us/步 - 损失:0.0082

哇损失很小,我的小神经网络做得很好!但是,如果我在原始训练数据上验证结果

prediction = net.predict(training_data)
prediction_delta = (prediction - training_results)

尽管 prediction_delta 中的一些值总体上很小,但损失远高于 0.0082,单个值高达 0.44。请注意,这是用于拟合网络的相同训练数据,而不是测试数据(也显示类似结果),因此我希望返回值 0.082。Keras 是如何计算这个损失数的?

2个回答

当您评估模型时,您没有使用与训练期间计算损失相同的方法来计算损失。

在培训期间,您使用了mean_squared_error

net.compile(optimizer = 'adam', loss = 'mean_squared_error')

mean_squared_error因此,您应该在评估时使用相同的误差函数 ( )。

如果您手动执行此操作,则需要:

prediction = net.predict(training_data)
prediction_delta = np.mean((prediction - training_results) ** 2)

或者您可以让 Keras 使用evaluate()函数自动为您完成:

net.evaluate(training_data, training_results)

在这种特殊情况下,损失是均方误差

即模型预测的差异平方的平均值和每个样本的实际值。