内外印刷有什么区别
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 循环时,您不再迭代结果,因此它从未被评估。
见
我正在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 循环时,您不再迭代结果,因此它从未被评估。
见