如何在Tensorflow

时间:2017-11-16 18:46:49

标签: python tensorflow tensorflow-datasets

我希望将现有数据集的大小加倍,以便通过向其中添加随机噪声来动态训练张量流中的神经网络。因此,当我完成时,我将拥有所有现有示例以及添加了噪声的所有示例。我也喜欢在变换它们时交织它们,所以它们按顺序出现:示例1没有噪声,示例1有噪声,示例2没有噪声,示例2有噪声等等。我' m使用Dataset api努力实现这一目标。我试图使用unbatch来实现这一点:

def generate_permutations(features, labels):
    return [
        [features, labels],
        [add_noise(features), labels]
    ]

dataset.map(generate_permutations).apply(tf.contrib.data.unbatch())

但我收到错误Shapes must be equal rank, but are 2 and 1。我猜测张量流是试图从该批次中产生一个张量我返回,但是featureslabels是不同的形状,因此不起作用。我可以通过制作两个数据集并将它们合并在一起来做到这一点,但是我担心会导致非常偏斜的训练,我训练了一半的时间,突然所有的数据都有了这个新的转换。下半场。如何在不将这些转换写入磁盘之前动态完成此操作,然后再加入tensorflow?

1 个答案:

答案 0 :(得分:3)

Dataset.flat_map()转换是您需要的工具:它使您能够将单个输入元素映射到多个元素,然后展平结果。您的代码如下所示:

def generate_permutations(features, labels):
    regular_ds = tf.data.Dataset.from_tensors((features, labels))
    noisy_ds = tf.data.Dataset.from_tensors((add_noise(features), labels))
    return regular_ds.concatenate(noisy_ds)

dataset = dataset.flat_map(generate_permutations)