我在(https://www.tensorflow.org/guide/eager)中看到了以下代码:
def fizzbuzz(max_num):
counter = tf.constant(0)
max_num = tf.convert_to_tensor(max_num)
for num in range(1, max_num.numpy()+1):
num = tf.constant(num)
if int(num % 3) == 0 and int(num % 5) == 0:
print('FizzBuzz')
elif int(num % 3) == 0:
print('Fizz')
elif int(num % 5) == 0:
print('Buzz')
else:
print(num.numpy())
counter += 1
fizzbuzz(15)
为什么max_num需要转换张量?
答案 0 :(得分:2)
在此示例中,它仅用于简单的演示目的(即,显示Eager的工作方式)-否则,这是多余的。如果问题是“为什么急于使用张量?” --
TensorFlow操作只能在张量实例上运行(例如Tensor
,EagerTensor
)-即使在急切执行中也是如此。渴望实际上并不是没有图-它是主要是图,“已执行图”。
至于“为什么”-长问题,而短答案是“优化”;在实际执行之前,TensorFlow会智能地组织输入并进行类型转换-这样做需要输入具有某些属性和方法,这些属性和方法在将其转换为张量后会继承。使用高级操作时,这是自动完成的,但是如果编写自定义功能(例如优化程序),则可能需要手动进行转换。