0

我想通过向其添加随机噪声来将我用来在 tensorflow 中训练神经网络的现有数据集的大小加倍。因此,当我完成后,我将拥有所有现有示例以及所有添加了噪声的示例。我还想在转换它们时将它们交错,所以它们按以下顺序出现:示例 1 没有噪音,示例 1 有噪音,示例 2 没有噪音,示例 2 有噪音,等等。我正在努力完成这个使用数据集 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。我猜 tensorflow 正试图从我返回的那一批中制作一个张量,但是features形状labels不同,所以这不起作用。我可能可以通过制作两个数据集并将它们连接在一起来做到这一点,但我担心这会导致训练非常倾斜,我在一半的时间里训练得很好,突然间所有的数据都在第二次进行了新的转换一半。在输入 tensorflow 之前,如何在不将这些转换写入磁盘的情况下即时完成此操作?

4

1 回答 1

4

转换是您需要的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)
于 2017-11-17T06:23:30.523 回答