Оценщик входной функции обработки случайного шума

Использование пользовательских оценок в 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 ко всему набору данных каждую эпоху, чтобы каждый выходной пример имел новый случайный шум, применяемый к нему на неопределенное время во время процесса обучения?

Спасибо вам всем :)

0
0
40
1

Ответы 1

из TensorFlow tf.data.Datasetдокументация метода map:

map(
    map_func,
    num_parallel_calls=None
)

Maps map_func across the elements of this dataset.

This transformation applies map_func to each element of this dataset, and returns a new dataset containing the transformed elements, in the same order as they appeared in the input.

Таким образом, набор данных из dataset.map(add_noise) применяет случайный шум только один раз, и, следовательно, итератор, возвращенный из dataset.make_one_shot_iterator(), применил случайный шум только один раз. Если после каждой эпохи вы повторяете код, в котором вы перетасовываете свои данные и применяете случайный шум и т. д., То для каждой эпохи будет применяться новый случайный шум, а это то, что вы хотите.

Спасибо за ваш ответ. Предполагается, что dataset.repeat () позволяет покупать бесконечные эпохи. Интересно, повторяет ли он операции с набором данных (которые создавали бы шум, генерируемый каждую эпоху), или он просто зацикливает первый сгенерированный набор данных ..

alelouis 11.08.2018 16:40

Хорошо, я прочитал больше документации и из того, что я видел, я думаю, что метод map сохраняет функцию и выполняет новый вызов функции при каждом вызове данных, но я не уверен. Быстрый способ проверить, вызывается ли функция каждый раз (чтобы она генерировала новый шум для ваших данных) - это напечатать случайное число в функции add_noise и запустить вашу программу с некоторыми фиктивными данными. Что-то вроде print(np.random.rand(1))

Vinicius Kramer Scariot 12.08.2018 20:53

Другие вопросы по теме