python - Keras 中的 model.evaluate() 返回什么值?
问题描述
我的模型从多个密集层获得了多个输出。我的模型'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 的新手,这可能是一个微不足道的问题。但是,我已经阅读了 Keras 的文档,但我仍然不确定。
解决方案
引用自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_1
和dense_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']
推荐阅读
- javascript - 如何在保留单个连字符分隔符规则的同时从带连字符的序列键中删除无效字符?
- groovy - 使用 MS Graph API 与 MS Azure SDK 的主要广告和缺点是什么
- laravel - 二选动态vue laravel
- c# - 我可以知道我的应用是否允许与 UWP 中未配对的设备配对吗?
- python - 如何将 qtdesigner 转换为 python 文件?
- typescript - TypeScript 错误 TS2304:找不到名称“类别”
- javascript - 检查页面加载日期
- java - JavaFX中控制器和主类之间的通信
- group-by - Fetchxml 如何在 groupby fetch 中获取多个属性(聚合)
- html - Wordpress:如何更改站点标题旁边的站点徽标?