内外印刷有什么区别

What's the difference between the print inside and outside

我正在MacBook M1 上学习2.8.0 版本的tensorflow。 为了调试数据集的地图函数中的代码,我想在我的函数中打印张量值。

def function(i):
    print("in: ", i)
    if i < 2:
        i = i - 1
    return i


dataset = tf.data.Dataset.range(1, 6)
dataset = dataset.map(lambda x: tf.py_function(function, inp=[x], Tout=tf.int64))
for x in dataset:
    print("out:", x)

我得到了爆炸的输出:

in:  tf.Tensor(1, shape=(), dtype=int64)
out: tf.Tensor(0, shape=(), dtype=int64)
in:  tf.Tensor(2, shape=(), dtype=int64)
out: tf.Tensor(2, shape=(), dtype=int64)
in:  tf.Tensor(3, shape=(), dtype=int64)
out: tf.Tensor(3, shape=(), dtype=int64)
in:  tf.Tensor(4, shape=(), dtype=int64)
out: tf.Tensor(4, shape=(), dtype=int64)
in:  tf.Tensor(5, shape=(), dtype=int64)
out: tf.Tensor(5, shape=(), dtype=int64)

我删除了外面的打印后,没有得到任何输出。 里面的印刷品和外面的印刷品有什么区别。 不明白为什么只有同时出现印记才能生效。 除此之外,print 和 tf.print 有什么区别?

我认为这是因为 tensorflow 数据集具有 延迟加载,这意味着它们在您实际尝试迭代结果之前不会被评估。

当您删除 for 循环时,您不再迭代结果,因此它从未被评估。