有和没有@ tf.function的不同行为

时间:2019-04-26 13:07:10

标签: python tensorflow eager-execution

i的值是3的倍数时,以下代码将不会产生“模糊”:

@tf.function
def fizzbuzz(n):
  msg = tf.constant('')
  for i in tf.range(n):
    if int(i % 3) == 0:
      msg += 'Fizz'
    elif tf.equal(i % 5, 0):
      msg += 'Buzz'
    else:
      msg += tf.as_string(i)
    msg += '\n'
  return msg

print(fizzbuzz(tf.constant(15)).numpy().decode())

但是如果将@tf.function装饰器注释掉,它通常可以以3的倍数运行。

1 个答案:

答案 0 :(得分:0)

以下修复程序对我有用:使用tf.modtf.equal的组合,而不是%==

几天前我遇到了这个问题,我不确定这是错误还是期望的行为。

@tf.function
def fizzbuzz(n):
    msg = tf.constant('')
    for i in tf.range(n):
        if tf.equal(tf.mod(i, 3), 0):
            msg += 'Fizz'
        elif tf.equal(i % 5, 0):
            msg += 'Buzz'
        else:
            msg += tf.as_string(i)
        msg += '\n'
    return msg
print(fizzbuzz(tf.constant(15)).numpy().decode())
# Output
#Fizz
#1
#2
#Fizz
#4
#Buzz
#Fizz
#7
#8
#Fizz
#Buzz
#11
#Fizz
#13
#14