传递Dataset.from_tensor_slices列表和元组

时间:2019-04-28 15:57:03

标签: python tensorflow

在处理一些张量流代码(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如何对待传入的元组和列表的故意区别吗?

1 个答案:

答案 0 :(得分:0)

感谢@giser_yugang提供的链接/答案。

来自linked问题:

  

这按预期方式工作:tf.data API使用Python列表表示应隐式转换为张量的值,使用Python元组表示应解释为(潜在嵌套)结构的多个组成部分的值。 / p>

可能是许多细微问题的原因...