Keras中的model.evaluate()返回什么值?

g6ll5ycj  于 2023-08-06  发布在  其他
关注(0)|答案(2)|浏览(197)

我从多个密集层的模型中获得了多个输出。我的模型在编译时将'accuracy'作为唯一的度量。我想知道每个输出的损耗和精度。这是我的代码的一部分。

scores = model.evaluate(X_test, [y_test_one, y_test_two], verbose=1)

字符串
当我把分数打印出来的时候,这就是结果。

[0.7185557290413819, 0.3189622712272771, 0.39959345855771927, 0.8470299135229717, 0.8016634374641469]


这些数字代表了什么?
我是新来的,这可能是一个微不足道的问题。然而,我已经阅读了来自Keras的文档,但我仍然不确定。

zpjtge22

zpjtge221#

引用自evaluate()方法文档:

返回

标量测试损失(如果模型有单个输出且没有度量)或标量列表(如果模型有多个输出和/或度量)。属性model.metrics_names将为标量输出提供显示标签。
因此,您可以使用模型的metrics_names属性来找出每个值对应的值。举例来说:

from keras import layers
from keras import models
import numpy as np

input_data = layers.Input(shape=(100,)) 
out_1 = layers.Dense(1)(input_data)
out_2 = layers.Dense(1)(input_data)

model = models.Model(input_data, [out_1, out_2])
model.compile(loss='mse', optimizer='adam', metrics=['mae'])

print(model.metrics_names)

字符串
输出以下内容:

['loss', 'dense_1_loss', 'dense_2_loss', 'dense_1_mean_absolute_error', 'dense_2_mean_absolute_error']


这表明您在evaluate方法的输出中看到的每个数字对应于什么。
此外,如果你有很多层,那么这些dense_1dense_2的名字可能有点模糊。要解决这种不明确性,您可以使用层的name参数为层分配名称(不一定在所有层上,但仅在输入和输出层上):

# ...
out_1 = layers.Dense(1, name='output_1')(input_data)
out_2 = layers.Dense(1, name='output_2')(input_data)
# ...

print(model.metrics_names)


其输出更清楚的描述:

['loss', 'output_1_loss', 'output_2_loss', 'output_1_mean_absolute_error', 'output_2_mean_absolute_error']

sy5wg1nm

sy5wg1nm2#

我们应该清楚,“损失”数字是x_test数组中每个项目计算的ALL损失之和。x_test包含测试数据,y_test包含标签。损失数字是所有损失的总和,而不仅仅是x_test数组中一个项目的一次损失。

相关问题