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。请勿指定 batch_size如果您的数据以符号张量的形式,数据集, 数据集迭代器,发电机或keras.utils.sequence实例 (由于它们生成批量)。
步骤:整数或无。步骤总数(样本批次) 在宣布评估回合之前。被忽略 none的默认值。
文档对我来说有点模糊。我不明白 dataset 在句子中的含义。batch_size如果您的数据是符号张量的形式
就我而言,我的模型具有多个输入,并且输入x
是numpy数组的列表。我的X看起来如下:
print(len(x)) returns 4
print(x[0].shape) returns (128, 9, 16)
重要的是,数据集(该示例中的火车设置)中有128个示例。
虽然是这种情况,但我对如何调用评估功能感到非常困惑?我特别想知道如何设置 batch_size 和 steps parameters。
我可以按照以下方式运行:
替代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种替代方案给出了截然不同的结果。
有人清楚地知道这两个调用之间有什么区别?
我也试图检查代码,但无法真正弄清楚这一点。
我不明白句子中数据集的含义:
这里引用的数据集是tf.data.Dataset()
的实例。数据集的batch_size
已经定义。我们使用以下方式定义它:
tf.data.Dataset.batch( batch_size )
因此,KERAS evaluate
方法中不需要参数。
什么是
steps
参数?
步骤大小是将样本总数除以批处理大小的何时。如果我有1000个样本和50个批次示例,则步骤数为20(1000/50)。您不需要主要输入steps
参数。
对于第一个替代方案:
批处理大小设置为无。因此,将使用默认值32。因此,根据计算,步骤数为4(128/32)。
对于第二个替代方案:
批处理大小设置为64。因此,根据计算,步骤数为2(128/64)。
替代方案之间的差异:
两个替代方案的不同批量大小为32和64。因此,损失和准确性的计算将不同。