Как правильно применить увеличение данных к набору данных TFRecord? - PullRequest
0 голосов
/ 16 апреля 2020

Я пытаюсь применить дополнение данных к набору данных TFRecord после его анализа. Однако, когда я проверяю размер набора данных до и после сопоставления функции дополнения, размеры одинаковы. Я знаю, что функция разбора работает, и наборы данных верны, так как я уже использовал их для обучения модели. Поэтому я включил код только для сопоставления функции и подсчета примеров после этого.

Вот код, который я использую:

num_ex = 0

def flip_example(image, label):
    flipped_image = flip(image)
    return flipped_image, label


dataset = tf.data.TFRecordDataset('train.TFRecord').map(parse_function)
for x in dataset:
    num_ex += 1

num_ex = 0
dataset = dataset.map(flip_example)

#Size of dataset
for x in dataset:
    num_ex += 1

В обоих случаях num_ex = 324 вместо ожидаемых 324 для неуставленных и 648 для аугментированных. Я также успешно протестировал функцию flip, поэтому, похоже, проблема в том, как функция взаимодействует с набором данных. Как правильно реализовать это увеличение?

Ответы [ 2 ]

1 голос
/ 16 апреля 2020

Когда вы применяете увеличение данных с помощью tf.data API, это делается на лету , что означает, что каждый пример преобразуется в соответствии с вашим методом. Увеличение данных таким способом не означает, что количество примеров в вашем конвейере изменяется.

Если вы хотите использовать каждый пример n раз, просто добавьте dataset = dataset.repeat(count=n). Возможно, вы захотите обновить свой код для использования tf.image.random_flip_left_right, в противном случае переворот выполняется каждый раз одинаково.

0 голосов
/ 16 апреля 2020

В вашем примере во второй раз, когда вы проверяете num_ex, набор данных содержит только перевернутые изображения, так что 324. Кроме того, если у вас большой набор данных, больше 324, вы можете захотеть взглянуть на онлайн-расширение данных. В этом случае во время обучения набор данных по-разному увеличивается в каждую эпоху, и вы тренируетесь только на расширенных данных, а не на исходном наборе данных. Это помогает обученной модели лучше обобщаться. (https://www.tensorflow.org/tutorials/images/data_augmentation)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...