我想在 Tensorflow 中堆叠两个数据集对象(R 中的 rbind 函数)。我从 tfRecord 文件创建了一个数据集 A,从 numpy 数组创建了一个数据集 B。两者都有相同的变量。您知道是否有办法堆叠这两个数据集以创建更大的数据集?或者创建一个从这两个来源随机读取数据的迭代器?
谢谢
原文由 Kent930 发布,翻译遵循 CC BY-SA 4.0 许可协议
我想在 Tensorflow 中堆叠两个数据集对象(R 中的 rbind 函数)。我从 tfRecord 文件创建了一个数据集 A,从 numpy 数组创建了一个数据集 B。两者都有相同的变量。您知道是否有办法堆叠这两个数据集以创建更大的数据集?或者创建一个从这两个来源随机读取数据的迭代器?
谢谢
原文由 Kent930 发布,翻译遵循 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 许可协议
4 回答4.4k 阅读✓ 已解决
4 回答3.8k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
1 回答4.4k 阅读✓ 已解决
1 回答3.8k 阅读✓ 已解决
1 回答2.8k 阅读✓ 已解决
2 回答2k 阅读✓ 已解决
在处理数据集时,
tf.data.Dataset.concatenate()
方法最接近于tf.stack()
方法。如果您有两个具有相同结构的数据集(即每个组件的类型相同,但形状可能不同):然后你可以按如下方式连接它们: