Dra*_*kem 13 python tensorflow
我正在研究张量流中的卷积神经网络,我遇到了问题.问题是我通过tfrecords读取的输入图像包含一定数量的nan值.造成这种情况的原因是图像表示深度图,其中包含一些无限值,并且在tfrecord中对其进行编码然后解码以将其馈送到网络中这些无限值变为nan值.
现在,因为在我的情况下替换原始图像中的无限值然后在tfrecors中编码它不是一个选项,有任何方法我可以替换我的图像张量中的nan值作为一个操作,然后我将它提供给净?
All*_*oie 25
tf.where和tf.is_nan的组合应该有效:
import tensorflow as tf
with tf.Session():
has_nans = tf.constant([float('NaN'), 1.])
print(tf.where(tf.is_nan(has_nans), tf.zeros_like(has_nans), has_nans).eval())
Run Code Online (Sandbox Code Playgroud)
打印(使用TensorFlow 0.12.1):
[ 0. 1.]
Run Code Online (Sandbox Code Playgroud)
按值剪辑使 NaN 无穷大,对于一个变量来说是过度杀伤力。我用它来将单个值转换为 0(如果它是 NaN):
value_not_nan = tf.dtypes.cast(tf.math.logical_not(tf.math.is_nan(value)), dtype=tf.float32)
tf.math.multiply_no_nan(value, value_not_nan)
Run Code Online (Sandbox Code Playgroud)
如果有人在 Tensorflow 2.0 中寻找解决方案,Allen Lavoie的改编代码是:
import tensorflow as tf
with tf.compat.v1.Session():
has_nans = tf.constant([float('NaN'), 1.])
print(tf.where(tf.math.is_nan(has_nans), tf.zeros_like(has_nans), has_nans).eval())
Run Code Online (Sandbox Code Playgroud)
与 TF2.0 兼容的一种更简单的方法是使用tf.clip_by_value,它会镜像np.clip并删除 NaN(请参阅此处):
no_nans = tf.clip_by_value(has_nans, -1e12, 1e12)
Run Code Online (Sandbox Code Playgroud)
一些警告:1) 这也会删除 infs 2) 根据您的应用程序,您可能需要将剪辑值设置为高值以避免丢失信息。
| 归档时间: |
|
| 查看次数: |
12430 次 |
| 最近记录: |