有没有办法堆叠两个tensorflow数据集?

时间:2018-02-13 16:37:24

标签: python python-3.x numpy tensorflow tensorflow-datasets

我想在Tensorflow中堆叠两个数据集对象(R中的rbind函数)。我从tfRecord文件创建了一个数据集A,从numpy数组创建了一个数据集B.两者都有相同的变量。你知道是否有办法堆叠这两个数据集来创建一个更大的数据集?或者创建一个随机读取这两个来源数据的iterrator?

由于

2 个答案:

答案 0 :(得分:5)

当使用数据集工作时,tf.data.Dataset.concatenate()方法是tf.stack()最接近的模拟方法。如果您有两个具有相同结构的数据集(即每个组件的类型相同,但可能有不同的形状):

dataset_1 = tf.data.Dataset.range(10, 20)
dataset_2 = tf.data.Dataset.range(60, 70)

...你可以按如下方式连接它们:

combined_dataset = dataset_1.concatenate(dataset_2)

答案 1 :(得分:0)

如果通过堆叠来表示tf.stack()np.stack()的作用:

将等级R张量的列表堆叠到一个等级(R+1)张量中。

https://www.tensorflow.org/api_docs/python/tf/stack

沿着新轴加入一系列数组。

https://docs.scipy.org/doc/numpy/reference/generated/numpy.stack.html

那么我认为tf.data.Dataset最接近的是Dataset.zip()

@staticmethod
zip(datasets)

通过将给定的数据集压缩在一起来创建Dataset

https://www.tensorflow.org/api_docs/python/tf/data/Dataset?version=stable#zip

这允许您通过遍历原始数据集的共享维度(类似于stack()张量或矩阵)来遍历多个数据集。

然后,您还可以使用.map(tf.stack).map(lambda *t: tf.stack(t, axis=-1))将张量分别沿着正面或背面的新尺寸堆叠起来。

如果确实要实现tf.concat()np.concatenate()的功能,则可以使用Dataset.concatenate()