【发布时间】:2018-05-14 19:27:39
【问题描述】:
我有一长串整数列表(代表句子,每个都有不同的大小),我想使用 tf.data 库提供这些列表。每个列表(列表的列表)都有不同的长度,我得到一个错误,我可以在这里重现:
t = [[4,2], [3,4,5]]
dataset = tf.data.Dataset.from_tensor_slices(t)
我得到的错误是:
ValueError: Argument must be a dense tensor: [[4, 2], [3, 4, 5]] - got shape [2], but wanted [2, 2].
有没有办法做到这一点?
编辑 1:为了清楚起见,我不想填充列表的输入列表(它是包含超过一百万个元素的句子列表,长度不一)我想使用 tf.data 库来提供,以适当的方式,具有不同长度的列表列表。
【问题讨论】:
-
如果您将句子列表(字符串列表)传递给
tf.data.Dataset.from_tensor_slices,它应该可以工作,然后您应该能够使用dataset.map(your_function)将每个句子转换为整数列表。然后您可以使用dataset.padded_batch自动添加填充。 -
嗨@OlivierMoindrot,我看过那个例子。我担心的是:当您在训练中运行图形时(即每次向模型提供新数据时),它们会执行映射函数,还是在训练之前在整个数据集上执行,然后输入结果?在我看来,第一个训练比第二个慢得多,这就是我想要避免的。
-
这是
tf.data的重点,它在后台使用队列,只根据需要处理数据。您可以“预取”数据以确保您的 GPU 永远不会等待数据并且以 100% 的速度工作。由于数据在一端被消耗(用于训练),因此之前的队列被数据填满。您甚至可以使用num_parallel_calls拥有多个工作人员。 -
dataset.prefetch
标签: python tensorflow tensorflow-datasets