就像前部分解释的,分析(profiling)能够让你跟踪特定运行的内存使用情况,不过,开奖,注意整个模型的内存消耗更重要些。需要始终确定没有超出机器内存,因为 swapping 肯定会让输入流程放慢,会让你的 GPU 开始坐等新数据。简单地 top,就像前文讲到的 TensorBoard 队列图就应当足够侦测到这样的行为。然后使用前文提过的 tracing,进行细节调查。 调试:print 会帮到你 我主要用 tf.Print 来调试诸如停滞损失(stagnating loss)或奇怪的输出等问题。由于神经网络天性的缘故,观察模型内部张量原始值(raw value)通常并没多大意义。没人能够解释清楚数以百万的浮点数并搞清楚哪儿有问题。不过,专门 print 出数据形状(shape)或均值就能发现重要见解。如果你正在试着实现一些既有模型,你就能比较自己模型值和论文或文章中的模型值,这有利于解决棘手问题或发现论文中的书写错误。 有了 TensorFlow 1.0,我们也有了新的调试工具()——这个看起来似乎还蛮有前途的。虽然我还没有用过,不过呢,肯定会在接下来的时间里尝试一下啦。 设定一个运算执行的超时时间 你已经实现了你的模型,载入了会话,但却没动静?这经常是有空列队(empty queues)造成的,但是如果你并不清哪个队列才是罪魁祸首,一个很简单的解决办法:在创造会话时,设定运行超时时间——当运行超过你设定的时限,脚本就会崩溃。 使用栈进行追踪,找出让你头疼的问题,解决问题然后继续训练。 原文链接: ©本文为机器之心编译,转载请联系本公众号获得授权。 ?------------------------------------------------ 加入机器之心(全职记者/实习生):[email protected] 投稿或寻求报道:[email protected] 广告&商务合作:[email protected] (责任编辑:本港台直播) |