如何使用 tf.while_loop 进行急切执行?
How to use tf.while_loop with eager execution?
在文档中,tf.while_loop 的主体必须是 python 可调用的。
i = tf.constant(0)
b = lambda i: tf.add(i,1)
c = lambda i: tf.less(i,10)
tf.while_loop(c,b, [i])
有效但
def b(i):
tf.add(i,1)
i = tf.constant(0)
c = lambda i: tf.less(i,10)
tf.while_loop(c,b, [i])
抛出 ValueError:尝试将具有不受支持的 type() 的值 (None) 转换为 Tensor
2.0默认是eager execution,请问是什么问题?!
您忘记在函数中添加 return 语句:
import tensorflow as tf
def b(i):
return tf.add(i, 1)
i = tf.constant(0)
c = lambda i: tf.less(i, 10)
tf.while_loop(c, b, [i]) # <tf.Tensor: id=51, shape=(), dtype=int32, numpy=10>
请注意,在您的第一个示例函数中,b
确实 return 增加了值:
i = tf.constant(0)
b = lambda i: tf.add(i,1)
c = lambda i: tf.less(i,10)
tf.while_loop(c,b, [i])
print(b(1).numpy()) # 2
在文档中,tf.while_loop 的主体必须是 python 可调用的。
i = tf.constant(0)
b = lambda i: tf.add(i,1)
c = lambda i: tf.less(i,10)
tf.while_loop(c,b, [i])
有效但
def b(i):
tf.add(i,1)
i = tf.constant(0)
c = lambda i: tf.less(i,10)
tf.while_loop(c,b, [i])
抛出 ValueError:尝试将具有不受支持的 type() 的值 (None) 转换为 Tensor
2.0默认是eager execution,请问是什么问题?!
您忘记在函数中添加 return 语句:
import tensorflow as tf
def b(i):
return tf.add(i, 1)
i = tf.constant(0)
c = lambda i: tf.less(i, 10)
tf.while_loop(c, b, [i]) # <tf.Tensor: id=51, shape=(), dtype=int32, numpy=10>
请注意,在您的第一个示例函数中,b
确实 return 增加了值:
i = tf.constant(0)
b = lambda i: tf.add(i,1)
c = lambda i: tf.less(i,10)
tf.while_loop(c,b, [i])
print(b(1).numpy()) # 2