#为什么用于测试数据要用固定的值,如果是用整个test做测试?
来源:5-5 Tensorboard实战(2)
战战的坚果
2020-03-28
test_summary_str = sess.run([merged_summary_test],
feed_dict={
x: fixed_test_batch_data,
y: fixed_test_batch_labels,
})[0]
老师,关于这段代码,我有三个问题:
1、为什么用于测试数据要用固定的值,如果是用整个test做测试,求结果,还可以理解,代码中的意思是每次用测试集中的一个batch来求loss和accuracy吗?,可是一个batch可以代表整个test吗?,为什么这里 test_summary_str 里 feed 的是一个固定的test batch呢?
2、
代码:if (i+1) % 500 == 0:
print(’[Train] Step: %d, loss: %4.5f, acc: %4.5f’ % (i+1, loss_val, acc_val))
问题:老师,在这里我想问一个前面的比较基础的知识,在之前所有的代码中,每到500的整数倍时都会输出在train数据上的loss值和accuracy值,我想问的是,在这里输出的loss值和accuracy值,是不是都是对应batch上的loss值和accuracy值呀?,就是它并不是整个训练数据集的loss值和accuracy值,而是通过next_batch取到的batch的数据所计算出来的loss值和accuracy值。
3、 老师test_summary_str 列表中存储的是merged_summary_test的值,也就是Loss和accuracy, 那么取第0个是为了从列表中把元素取出来,我看到老师在别的同学的问题下回复过说是这个列表只有一个元素,取第0个就是把列表中的数据取出来了,那取出来的是什么呢?是这一步在固定test batch上的loss值和accuracy值吗?类似于这个形式吗 [(0.01,0.05)]?
1回答
-
正十七
2020-03-30
如这个问题中所答:https://coding.imooc.com/learn/questiondetail/178475.html
问题1: 测试集中的一个batch当然不能代表整个测试集,但是为了不拖慢速度,就这样处理了。
问题2: 对,是单个batch上的准确率和loss,不能代表整个训练集。其实如果你有集群的话,我们一般不把eval和train写在一块,可以写多个任务,一个只用来训练,另一个用来检查是不是有新保存的模型,如果有就在测试集上测一遍。还可以再起一个任务对整个训练集做测试等等。
问题3:我还真没打印过summary_str里的值,在之前的回答中应该没说过从summary_str总取值,而是说的从sess.run的结果中取值。你可以试试print一下summary_str看是什么结果。
00
相似问题