【发布时间】:2026-01-11 06:00:02
【问题描述】:
我正在运行 TensorFlow,我碰巧有一些东西会产生 NaN。我想知道它是什么,但我不知道该怎么做。主要问题是,在“正常”的程序程序中,我只会在执行操作之前编写一个打印语句。 TensorFlow 的问题是我不能这样做,因为我首先声明(或定义)图形,因此将打印语句添加到图形定义中没有帮助。是否有任何规则、建议、启发式方法或任何东西来追踪可能导致 NaN 的原因?
在这种情况下,我更准确地知道要看哪一行,因为我有以下内容:
Delta_tilde = 2.0*tf.matmul(x,W) - tf.add(WW, XX) #note this quantity should always be positive because its pair-wise euclidian distance
Z = tf.sqrt(Delta_tilde)
Z = Transform(Z) # potentially some transform, currently I have it to return Z for debugging (the identity)
Z = tf.pow(Z, 2.0)
A = tf.exp(Z)
当这一行出现时,我认为它返回 NaN,正如我的摘要作者所声明的那样。为什么是这样?有没有办法至少探索 Z 平方根后的值?
对于我发布的具体示例,我尝试了tf.Print(0,Z),但没有成功,它什么也没打印。如:
Delta_tilde = 2.0*tf.matmul(x,W) - tf.add(WW, XX) #note this quantity should always be positive because its pair-wise euclidian distance
Z = tf.sqrt(Delta_tilde)
tf.Print(0,[Z]) # <-------- TF PRINT STATMENT
Z = Transform(Z) # potentially some transform, currently I have it to return Z for debugging (the identity)
Z = tf.pow(Z, 2.0)
A = tf.exp(Z)
我实际上不明白tf.Print 应该做什么。为什么需要两个参数?如果我想打印 1 张量,为什么需要通过 2?对我来说似乎很奇怪。
我正在查看函数tf.add_check_numerics_ops(),但它没有说明如何使用它(而且文档似乎不是很有帮助)。有谁知道这个怎么用?
因为我有 cmets 处理数据可能不好,所以我使用标准 MNIST。但是,我正在计算一个正数(成对的欧几里德距离),然后对其求平方根。因此,我看不出数据具体会成为什么问题。
【问题讨论】:
标签: python machine-learning neural-network tensorflow conv-neural-network