在处理一些张量流代码(v1.13.1)时,我注意到了这种微妙之处:
tf.enable_eager_execution()
for n in Dataset.from_tensor_slices(([1, 2], [3, 4])).make_one_shot_iterator():
print(n)
#
# prints:
# (<tf.Tensor: id=8, shape=(), dtype=int32, numpy=1>, <tf.Tensor: id=9, shape=(), dtype=int32, numpy=3>)
# (<tf.Tensor: id=12, shape=(), dtype=int32, numpy=2>, <tf.Tensor: id=13, shape=(), dtype=int32, numpy=4>)
#
for n in Dataset.from_tensor_slices([[1, 2], [3, 4]]).make_one_shot_iterator():
print(n)
#
# prints:
# tf.Tensor([1 2], shape=(2,), dtype=int32)
# tf.Tensor([3 4], shape=(2,), dtype=int32)
#
上面的区别是第一个循环将两个张量传递到一个元组中,第二个张量通过列表。我希望第二个循环与第一个循环一样工作,将张量切成薄片。这是tf如何对待传入的元组和列表的故意区别吗?
答案 0 :(得分:0)
感谢@giser_yugang提供的链接/答案。
来自linked问题:
这按预期方式工作:tf.data API使用Python列表表示应隐式转换为张量的值,使用Python元组表示应解释为(潜在嵌套)结构的多个组成部分的值。 / p>
可能是许多细微问题的原因...