当前位置:   article > 正文

【Tensorflow】tf.map_fn() 使用过程中遇到【inf, NaN】报错问题_omputed at time 0.0 is inf or nan.

omputed at time 0.0 is inf or nan.

采用python map 的正确写法如下 

mat_ratio = list(map(lambda x: 1.0/x if not x == 0.0 else float(64.0), mat_ratio))

但是,在有的时候,我们需要x是一个tensor,mat_ratio定义的是一个op graph,按照常规思维,进行如下改写: 

mat_ratio = tf.map_fn(lambda x: 1.0/x if not x == 0.0 else float(64.0), mat_ratio)

接下来就会看到错误了 :

InvalidArgumentError (see above for traceback): LossTensor is inf or nan : Tensor had NaN values

原来在tensorflow graph 定义中,if ... else 是不被识别的,只能通过tf.cond()进行代替,下面给出一个tf.cond的例子,具体的api请查看相关文档。

  1. z = tf.multiply(a, b)
  2. result = tf.cond(x < y, lambda: tf.add(x, z), lambda: tf.square(y))

根据以上例子,修改我的代码:

mat_ratio = tf.map_fn(lambda x: tf.cond(x > 0, lambda: 1/x, lambda: float(64.0)), mat_ratio)

ok, 完美解决[inf, NaN]问题。

注意,在tensorflow graph中,不支持x==0的操作,只支持><这样的操作。
 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/719894
推荐阅读
  

闽ICP备14008679号