有没有办法堆叠两个张量流数据集?

新手上路,请多包涵

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

谢谢

原文由 Kent930 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 418
2 个回答

在处理数据集时, 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)

原文由 mrry 发布,翻译遵循 CC BY-SA 4.0 许可协议

假设您有两个数据集,其元素形状分别为 (bs,d0,d1) 和 (bs,d0’,d1),并且您想要一个元素形状为 (bs,d0+d0’,d1) 的新数据集,您可以这样做使用 tf.Dataset.zip 然后连接第二个轴上的每个元素,如下例所示:

 import tensorflow as tf

a = tf.zeros((100,4,8))
b = tf.ones((100,1,8))

d1 = tf.data.Dataset.from_tensor_slices(a)
d1 = d1.batch(16,drop_remainder=True)      # elements shape (16,4,8)

d2 = tf.data.Dataset.from_tensor_slices(b)
d2 = d2.batch(16,drop_remainder=True)      # elements shape (16,1,8)

d = tf.data.Dataset.zip((d1,d2))
d = d.map(lambda x,y:tf.concat([x,y],axis=-2)) # elements shape (16,4+1,8)

it = iter(d)
x = next(it)
print(x.shape)
print(x)

如果您想将两个具有相同元素形状 (bs,d0,d1) 的数据集堆叠到一个具有元素形状 (bs,d0,d1,2) 的新数据集中,您可以压缩两个数据集,然后放置元素

import tensorflow as tf

a = tf.zeros((100,4,8))
b = tf.ones((100,4,8))

d1 = tf.data.Dataset.from_tensor_slices(a)
d1 = d1.batch(16,drop_remainder=True)      # elements shape (16,4,8)

d2 = tf.data.Dataset.from_tensor_slices(b)
d2 = d2.batch(16,drop_remainder=True)      # elements shape (16,4,8)

d = tf.data.Dataset.zip((d1,d2))
d = d.map(lambda x,y:tf.stack([x,y],axis=-1)) # elements shape (16,4,8,2)

it = iter(d)
x = next(it)
print(x.shape)
print(x)

原文由 Dema 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题