2017-09-14 67 views
0

我已成功尝试TensorFlow Mechanics 101教程,并且有以下问题。

我发现控制台输出的损耗值与TensorBoard显示的损耗值之间存在差异。

我的理解是,这些应该是相同的:

  • 控制台输出是由fully_connected_feed.R 190行上的每个第100步骤中创建并输出由sess$run施加到损失操作线182上创建;因此,这应该是该特定步骤的损失,四舍五入到小数点后两位。
  • TensorBoard显示的值也适用于每个第100步。它看起来是通过在线193上创建的来自summary_str的线194-195创建的,通过将sess$run应用于在线147上定义的摘要操作作为tf$summary$merge_all()。这应该选择唯一的汇总操作,相同的损失,在mnist.R的第125行中定义,并且此操作适用于同一步骤。

因此,这两个损失值应该相同,直到四舍五入。

但是,他们不是,虽然他们很接近。我试图比较他们对不同数据的学习没有很好地收敛,并发现更大的差异。

在我看来,我不明白关于TensorFlow摘要的基本内容。

我正在使用RStudio版本1.0.153,R版本3.4.1,在Ubuntu 16.04上今天重新安装所有R包。

任何帮助? 在此先感谢。

回答

0

问题是与此tuturial的文件fully_connected_feed.R的线183-184:

values <- sess$run(list(train_op, loss), feed_dict = feed_dict) 
loss_value <- values[[2]] 

我取代这两行由以下代码:

sess$run(train_op, feed_dict = feed_dict) 
loss_value = sess$run(loss, feed_dict = feed_dict) 

此代码看起来是相当于原始代码(这是我在此答案的早期版本中声明的内容,参考the manual for tf$Session$run),但是it is not

使用此代码,问题消失,并且控制台输出和相同loss操作的结果的摘要记录变得相同。