Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将多个TensorFlow数据集交错在一起_Tensorflow_Tensorflow Datasets - Fatal编程技术网

将多个TensorFlow数据集交错在一起

将多个TensorFlow数据集交错在一起,tensorflow,tensorflow-datasets,Tensorflow,Tensorflow Datasets,当前的TensorFlow数据集交错功能基本上是一个以单个数据集为输入的交错平面图。考虑到当前的API,将多个数据集交织在一起的最佳方式是什么?说它们已经建造好了,我有一份清单。我希望从它们中交替生成元素,并且我希望支持包含2个以上数据集的列表(即,堆叠的拉链和交错将非常难看) 谢谢!:) @mrry可能会提供帮助。编辑2:请参阅tf.contrib.data。从数据集中选择。它执行确定性数据集交错 编辑:请参见tf.contrib.data.sample\u from\u dataset。即使

当前的TensorFlow数据集交错功能基本上是一个以单个数据集为输入的交错平面图。考虑到当前的API,将多个数据集交织在一起的最佳方式是什么?说它们已经建造好了,我有一份清单。我希望从它们中交替生成元素,并且我希望支持包含2个以上数据集的列表(即,堆叠的拉链和交错将非常难看)

谢谢!:)


@mrry可能会提供帮助。

编辑2:请参阅
tf.contrib.data。从数据集中选择。它执行确定性数据集交错

编辑:请参见
tf.contrib.data.sample\u from\u dataset
。即使它执行随机抽样,我想它还是有用的


尽管这不是“干净的”,但这是我想出的唯一解决办法

datasets = [tf.data.Dataset...]

def concat_datasets(datasets):
    ds0 = tf.data.Dataset.from_tensors(datasets[0])
    for ds1 in datasets[1:]:
        ds0 = ds0.concatenate(tf.data.Dataset.from_tensors(ds1))
    return ds0

ds = tf.data.Dataset.zip(tuple(datasets)).flat_map(
    lambda *args: concat_datasets(args)
)
展开user2781994(带编辑),下面是我如何实现它的:

import tensorflow as tf

ds11 = tf.data.Dataset.from_tensor_slices([1,2,3])
ds12 = tf.data.Dataset.from_tensor_slices([4,5,6])
ds13 = tf.data.Dataset.from_tensor_slices([7,8,9])
all_choices_ds = [ds11, ds12, ds13]

choice_dataset = tf.data.Dataset.range(len(all_choices_ds)).repeat()
ds14 = tf.contrib.data.choose_from_datasets(all_choices_ds, choice_dataset)

# alternatively:
# ds14 = tf.contrib.data.sample_from_datasets(all_choices_ds)

iterator = ds14.make_initializable_iterator()
next_element = iterator.get_next()

with tf.Session() as sess:
    sess.run(iterator.initializer)
    while True:
        try:
            value=sess.run(next_element)
        except tf.errors.OutOfRangeError:
            break
        print(value)
输出为:

1
4
7
2
5
8
3
6
9
在Tensorflow 2.0中

tot_imm_dataset1 = 105
tot_imm_dataset2 = 55
e = tf.data.Dataset.from_tensor_slices(tf.cast([1,0,1],tf.int64)).repeat(int(tot_imm_dataset1/2)) 
f=tf.data.Dataset.range(1).repeat(int(tot_imm_dataset2-tot_imm_dataset1/2))
choice=e.concatenate(f)
datasets=[dataset2,dataset1]
dataset_rgb_compl__con_patch= tf.data.experimental.choose_from_datasets(datasets, choice)


这对我来说是可行的

我很确定这是行不通的:
ds0=tf.data.Dataset.from_tensors(datasets[0])
——这个参数不应该是一个张量,而不是一个
数据集
?我很确定它是可行的<代码>连接
tf.data.Dataset
的函数,而不是张量的函数。谢谢!这确实有效@mikkola之所以这样做是因为
concat_数据集
(即
数据集
)的参数不是数据集的元组,而是原始数据集中压缩在一起的元素元组。从这个意义上讲,参数名有点混乱。我也想到了这个解决方案。但是,在您的情况下,连接多个(>25)数据集需要多长时间?对我来说,需要几个小时你说需要几个小时是什么意思?什么要花那么长时间?数据集上的迭代?