Tensorflow Debug

请扶我起来,我还能再调几个BUG

Posted by WangJialin on August 30, 2016

相信大家在学习tensorflow时,有个最大的不爽就是调试不太方便,因为它采取的是图计算。因此,在调试的时候,一定要一步步的运用session中的fetch来进行调试!!这个其实也是超级方便的!

当运行多个epoch后,每次产生的loss或者其他state相同时

OK,这个问题有一次可把我折磨惨了,找了半天就是发现不了代码的错误在哪。先是发现loss来回抖动,接着耐心运行多个epoch之后,发现每次的结果一样。就是因为你忘了fetch训练的操作train_op;在sess运行的时候确保,train_op在fetch列表中!!!代码如下:

_ = sess.run([train_op], feed)

当loss长时间来回抖动时

OK,这个时候,你会发现训练了几个epoch好像没啥变化,完全是随机似的。其实不然,这个很有可能就是你设置最优化时的学习速率learning_rate设置过大,导致来回抖动,甚至发散。

当loss下降的非常慢,并且有很多的抖动时

请认真的观察数据,区分此情况和上一种情况的区别。这种情况下,loss还是稍微的有一点点规律在下降,但不明显,会抖动。能够确定代码是否有问题的方法是:

运行多个epoch,观察对于同一个batch,loss的大小变化趋势,如果是变小,证明你的代码应该是正确的,只是模型太复杂,所以loss对于不同的batch会有一些抖动;如果是变大,那应该是你的代码哪里出错了。

未完待续...