欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

【Tensorflow】tf.map_fn() 使用过程中遇到【inf, NaN】报错问题

发布时间:2023/12/15 61 豆豆
生活随笔 收集整理的这篇文章主要介绍了 【Tensorflow】tf.map_fn() 使用过程中遇到【inf, 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请查看相关文档。

z = tf.multiply(a, b) 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的操作,只支持><这样的操作。
 

总结

以上是生活随笔为你收集整理的【Tensorflow】tf.map_fn() 使用过程中遇到【inf, NaN】报错问题的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。