Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tensorflow 在反向过程中调试NAN_Tensorflow - Fatal编程技术网

Tensorflow 在反向过程中调试NAN

Tensorflow 在反向过程中调试NAN,tensorflow,Tensorflow,我试图调试一个有点复杂的非规范NN体系结构。计算前向传递很好,可以得到预期的结果,但当我尝试使用Adam或任何标准优化器进行优化时,即使在一次迭代后,学习率非常低,我也会得到NAN。我正在尝试定位它们,想知道是否有一种方法可以捕捉到nan的首次出现,并检测它出现在哪个op中?我尝试了tf.add\u check\u numerics\u ops(),但它似乎没有起到任何作用,或者可能我使用不正确。调试NAN可能很棘手,尤其是如果您有一个大型网络。将ops添加到图形中,以声明图形中的每个浮点张量不

我试图调试一个有点复杂的非规范NN体系结构。计算前向传递很好,可以得到预期的结果,但当我尝试使用Adam或任何标准优化器进行优化时,即使在一次迭代后,学习率非常低,我也会得到NAN。我正在尝试定位它们,想知道是否有一种方法可以捕捉到nan的首次出现,并检测它出现在哪个op中?我尝试了
tf.add\u check\u numerics\u ops()
,但它似乎没有起到任何作用,或者可能我使用不正确。

调试NAN可能很棘手,尤其是如果您有一个大型网络。将ops添加到图形中,以声明图形中的每个浮点张量不包含任何NaN值,但默认情况下不运行这些检查。相反,它返回一个op,您可以定期或在每个步骤上运行,如下所示:

train_op=。。。
check\u op=tf.add\u check\u numerics\u ops()
sess=tf.Session()
sess.run([train_-op,check_-op])#运行训练并检查NAN

也许您可以将打印操作添加到可疑操作的打印值中,类似这样

print_ops=[]
对于ops中的op:
打印操作附加(tf.print)(操作,[op],
消息=“%s:“%op.name,summary=10))
打印操作=tf.组(*打印操作)
sess.run([train\u op,print\u op])

要添加到所有操作中,您可以沿着的线路进行循环。

问题是,一旦我运行了列车操作,NAN就会在整个网络中传播,因此,找到原因是没有用的。我想做的是运行向前和向后传递,一旦生成nan,违规操作就会抛出异常。如果同时运行
train\u op
check\u op
,您应该会得到一个错误,报告第一个具有nan的节点-您可以捕获引发的
tf.invalidargumeinterror
,并从其
.op
属性中提取op。通过op的句柄,您可以访问其
op.inputs[0]
属性,查看哪些张量具有NaN值。@MohammedAlQuraishi如果这是公认的答案,则您应该选择它。:)您是否需要
tf.control\u dependencies
,因为顺序未定义,否则?当你的图有条件或while\u循环时,推荐的解决方案是什么?你在哪里可以解决这个问题?我也有同样的问题