tensorflow - tensorflow keras 评估函数
问题描述
该函数是如何evaluate
真正工作的,它究竟返回了什么?
这是evaluate
来自文档(来自tf.keras.models.Model
)的接口定义。
evaluate(
x=None,
y=None,
batch_size=None,
verbose=1,
sample_weight=None,
steps=None,
max_queue_size=10,
workers=1,
use_multiprocessing=False
)
文档说该函数在测试模式下返回模型的损失值和指标值。
2个参数在这里很重要:
batch_size:整数或无。每次梯度更新的样本数。如果未指定,batch_size 将默认为 32。如果您的数据是符号张量、数据集、数据集迭代器、生成器或 keras.utils.Sequence 实例的形式(因为它们会生成批次),请不要指定 batch_size。
步骤:整数或无。宣布评估轮结束之前的步骤总数(样本批次)。忽略默认值无。
文档对我来说有点模糊。我不明白句子中的数据集是什么意思“如果您的数据是符号张量,数据集...的形式,请不要指定batch_size。”
就我而言,我的模型有多个输入,输入x
是一个 numpy 数组列表。我的 x 如下所示:
print(len(x)) returns 4
print(x[0].shape) returns (128, 9, 16)
重要的是数据集(即本例中的训练集)中有 128 个示例。
虽然是这种情况,但我对应该如何调用评估函数感到非常困惑?我特别想知道我应该如何设置batch_size和steps参数。
我可以按如下方式运行它:
备选方案 1:
train_metrics = saved_model.evaluate(x = train_x,
y = train_y,
batch_size = None,
steps = None)
或者我也可以按以下方式运行它:
备选方案 2:
train_metrics = saved_model.evaluate(x = train_x,
y = train_y,
batch_size = 64,
steps = None)
鉴于我拥有上述格式的数据集,两种选择之间有什么区别。我实际上希望看到相同的结果(特别是“损失”),因为评估函数应该只遍历给定的数据集一次,并且应该返回整个数据集的结果。但它没有发生。上面的 2 个替代方案给出了截然不同的结果。
有谁清楚地知道这两个电话之间有什么区别?
我也尝试检查代码,但无法真正弄清楚细节..
解决方案
我不明白句子中的数据集是什么意思“如果您的数据是符号张量的形式,请不要指定batch_size,数据集......”
这里提到的数据集是 的一个实例tf.data.Dataset()
。数据集batch_size
已定义。我们使用以下方式定义它:
tf.data.Dataset.batch( batch_size )
evaluate
因此,Keras方法中不需要参数。
steps
论据是什么?
步长是样本总数除以批量大小。如果我有 1000 个样本且 batch_size 为 50,那么步数将为 20( 1000 / 50 )。steps
大多数情况下,您不需要输入参数。
对于第一种选择:
批量大小设置为无。因此,将使用默认值 32。因此,在这里,根据计算,步数将为 4 ( 128 / 32 )。
对于第二种选择:
批量大小设置为 64。因此,在这里,根据计算,步数将为 2(128 / 64)。
替代品之间的差异:
两种替代方案都有不同的批量大小,分别为 32 和 64。因此,损失和准确度的计算将不同。
推荐阅读
- javascript - 如何更改 React Native 中特定列的样式?
- flutter - 如何使用音量或电源按钮双击在后台打开颤振应用程序?
- maven - 无法解决来自 POM 中本地仓库的依赖关系
- rust - 如何读取前 N 行,然后读取字节?
- android-recyclerview - DiffUtil areContentsTheSame() 在 RecycleViewAdapter 中的 List 内容更新后总是返回 true
- laravel - 部署到托管 Laravel 8 后找不到模型
- android - Android 中的 NestedScrollingChild、NestedScrollingChild2 和 NestedScrollingChild3 有什么区别?
- jquery - 试图在多个同位素实例上集成分页
- python - Windows Run 找不到 Al Sweigart 的“Automate the Boring Stuff with Python”第 6 章中“mclip”的批处理文件
- android - 当文件名中不存在扩展名时如何获取文件扩展名?