【问题标题】:how evaluate function works in keras评估函数如何在 keras 中工作
【发布时间】:2018-07-10 20:41:30
【问题描述】:

我对 Keras 的 evaluate 函数应该期待什么价值感到有点困惑。

这是 Keras 文档中的 evaluate 函数定义:

evaluate(self, x=None, y=None, batch_size=None, 
         verbose=1, sample_weight=None, steps=None)

这是来自同一页面的简短描述:

返回测试模式下模型的损失值和指标值。

如果我有一个大型交叉验证数据集,需要我多次调用evaluate 函数,evaluate 函数是否记得以前的调用?还是每次只返回给定小批量的 loss 值?

【问题讨论】:

  • 描述中没有提到任何关于记忆的内容,所以很明显它只考虑了你通过 x 和 y 给出的批次

标签: python tensorflow machine-learning keras loss


【解决方案1】:

evaluate() 方法根据您传递给它的整个数据评估模型,因此给定的损失值和指标值基于模型在整个数据上的性能。

此外,还有另一种称为test_on_batch() 的方法,它在单批数据上测试模型,并返回给定数据批上模型的相应损失值和指标值。

但是,我不确定您所说的“我有一个大型交叉验证数据集,需要我多次调用评估函数...”(强调我的) .您的意思是整个验证数据不适合内存吗?如果是这种情况,并且您已将验证数据存储在磁盘上的文件中(例如 h5py 文件),那么您可以定义一个生成器并使用 evaluate_generator() 方法使用您定义的生成器执行评估。

【讨论】:

  • (1) 我现在的理解:开发集是由调用评估函数时的x和y参数提供的。假设开发集中有 100 个示例。使用 batch_size 参数,可以配置一次评估多少个示例。假设 batch_size 设置为 10。然后评估将重复 10 次(对评估(..)进行 1 次调用),评估函数返回整个开发集的评估结果(即 100)。但是假设我实际上在开发集中有 1000 个示例,我无法给出全部内容(bcz 内存不足),因此......
  • (2) 在这种情况下需要调用评估函数 10 次(假设每次我从开发集中给出 100 个示例)。然后每次调用评估函数将只给出给定 100 个示例的评估结果。为了解决这个问题,我可以使用evaluate_generator() 来获得所有1000 个示例的评估结果。我的理解现在正确吗?另外:训练时同样的事情有效吗?例如。 - 据我了解 - 不能使用带有 fit 功能的生成器,而是需要使用 fit_generator。
  • @edn 是的,你是对的。或者您可以手动执行:一个一个地加载 100 个样本的批次,每次在批次上调用 evaluate 并将输出存储在一个列表中。在检查所有批次并计算它们的损失和指标值之后,要计算最终的损失和指标值,只需取您存储的批次损失和指标值的平均值。
猜你喜欢
  • 2019-07-29
  • 2018-12-15
  • 1970-01-01
  • 1970-01-01
  • 2018-12-01
  • 2019-06-01
  • 1970-01-01
  • 2010-11-24
  • 2021-06-30
相关资源
最近更新 更多