赞
踩
采用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的操作,只支持><这样的操作。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。