【问题标题】:Estimator input function random noise processing估计器输入函数随机噪声处理
【发布时间】:2018-08-10 13:14:26
【问题描述】:

在 TensorFlow 1.9 中使用自定义估算器。 我的估算器训练 input_function 遵循典型模式,但我想确保我正在做我认为我正在做的事情。我有这个函数,我想将其应用于每个数据集示例。

def add_noise(data, label):
    tile = data['tile']
    sigma_noise = tf.pow(10.0, -SNR/20.0)
    noise = tf.random_normal(shape=tf.shape(tile), mean=0.0, stddev=sigma_noise, dtype=tf.float32) 
    tile += noise
    return {'tile' : tile}, label

所以使用数据集 API:

dataset = dataset.shuffle(buffer_size=70001)
dataset = dataset.map(parse_function)
dataset = dataset.map(add_noise)
dataset = dataset.batch(32)
dataset = dataset.repeat()
iterator = dataset.make_one_shot_iterator()

我的函数 add_noise 是否在每个时期都应用于整个数据集,以便每个输出示例在训练过程中无限期地应用新的随机噪声?

谢谢大家:)

【问题讨论】:

    标签: python tensorflow dataset


    【解决方案1】:

    来自map方法的TensorFlowtf.data.Datasetdocumentation

    map(
        map_func,
        num_parallel_calls=None
    )
    

    在此数据集的元素之间映射map_func

    此转换将map_func 应用于此数据集的每个元素, 并返回一个包含转换后元素的新数据集,在 与它们在输入中出现的顺序相同。

    所以来自dataset.map(add_noise) 的数据集只应用了一次随机噪声,因此从dataset.make_one_shot_iterator() 返回的迭代器只应用了一次随机噪声。如果在每个 epoch 之后,您重复代码,将数据打乱并应用随机噪声等,那么将为每个 epoch 应用一个新的随机噪声,这就是您想要的。

    【讨论】:

    • 感谢您的回答。 dataset.repeat() 应该允许无限时期购买我想知道它是否重复数据集操作(每个时期都会产生噪音)或者它是否只是循环第一个生成的数据集..
    • 好的,我已经阅读了更多的文档,从我所看到的来看,我认为map 方法会保留函数并在每次调用数据时对函数进行新的调用,但我不确定。测试是否每次都调用该函数(以便它为您的数据产生新的噪声)的一种快速方法是在add_noise 函数处打印一个随机数并使用一些虚拟数据运行您的程序。类似print(np.random.rand(1))
    猜你喜欢
    • 2015-04-05
    • 2010-11-18
    • 2011-01-27
    • 2020-06-18
    • 1970-01-01
    • 1970-01-01
    • 2011-06-20
    • 2011-12-06
    相关资源
    最近更新 更多