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。请勿指定 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。因此,损失和准确性的计算将不同。

最新更新