【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的操作,只支持><这样的操作。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二十四桥下一句

您的鼓励是我最大的创作动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值