TensorFlow Wide & Deep教程疑问:为何仅用评估数据集的一个批次测试?
嘿,我来帮你捋清楚这个问题!首先得澄清一个点:在官方的Wide & Deep示例中,默认情况下评估阶段并不是只处理一个批次,它会完整遍历整个adult.test数据集来计算最终的评估指标。但如果你观察到程序只输出了一个批次的结果,通常是以下几种情况导致的:
input_fn的参数配置问题
构建评估用的input_fn时,如果没指定num_epochs=1,数据集会无限循环生成批次。而estimator.evaluate()方法如果被设置了steps=1,就会只运行一个批次就停止评估;要是没设置steps,它会一直运行直到数据集耗尽(也就是num_epochs=1时的所有样本都处理完)。你可以去检查代码里评估部分的input_fn参数,看看是不是num_epochs或steps的设置出了问题。对日志输出的误解
程序在评估过程中,可能每处理完一个批次就会打印一次中间的指标数值,但这些只是过程数据,最终的评估结果是基于整个测试集的平均计算出来的。你看到的“一个批次的输出”可能只是中间日志,而非最终的评估结论。batch_size设置过大
如果把评估用的batch_size设成了和adult.test数据集总样本数一样大,那自然只会生成一个批次——这时候这个批次就包含了所有测试样本,评估结果其实还是基于整个数据集的。
另外,如果你看的是官方示例代码,它的评估逻辑是明确指定num_epochs=1的,所以数据集只会生成一轮,estimator.evaluate()会遍历所有测试样本,最终输出的是整个数据集的准确率、损失等指标。你可以重点检查调用evaluate()的代码段,确认steps参数有没有被错误设置,以及input_fn的num_epochs和batch_size配置是否正确。
内容的提问来源于stack exchange,提问作者Kuranes

