Как работает конвейер ввода данных tf.Data с дополнением данных в каждую эпоху? - PullRequest
1 голос
/ 13 мая 2019

Я использовал этот код (https://colab.research.google.com/github/tensorflow/models/blob/master/samples/outreach/blogs/segmentation_blogpost/image_segmentation.ipynb#scrollTo=tkNqQaR2HQbd) для моего конвейера с тензорным потоком данных. Но я не понимаю, как он работает. Они говорят, что «во время обучения наша модель никогда не увидит дважды одну и ту же картинку» Но как это работает? Я использую tf.data Map-Function с _augment-Function только один раз. Это происходит каждый раз в моей функции model.fit?

Я попытался проверить свою функцию _augment с распечаткой чего-либо. Но это произойдет только в первый раз, а не в каждую эпоху.

def get_baseline_dataset(filenames, 
                         labels,
                         preproc_fn=functools.partial(_augment),
                         threads=5, 
                         batch_size=batch_size,
                         shuffle=True):           
  num_x = len(filenames)
  # Create a dataset from the filenames and labels
  dataset = tf.data.Dataset.from_tensor_slices((filenames, labels))
  # Map our preprocessing function to every element in our dataset, taking
  # advantage of multithreading
  dataset = dataset.map(_process_pathnames, num_parallel_calls=threads)
  if preproc_fn.keywords is not None and 'resize' not in preproc_fn.keywords:
    assert batch_size == 1, "Batching images must be of the same size"

  dataset = dataset.map(preproc_fn, num_parallel_calls=threads)

  if shuffle:
    dataset = dataset.shuffle(num_x)


  # It's necessary to repeat our data for all epochs 
  dataset = dataset.repeat().batch(batch_size)
  return dataset
tr_cfg = {
    'resize': [img_shape[0], img_shape[1]],
    'scale': 1 / 255.,
    'hue_delta': 0.1,
    'horizontal_flip': True,
    'width_shift_range': 0.1,
    'height_shift_range': 0.1
}
tr_preprocessing_fn = functools.partial(_augment, **tr_cfg)
train_ds = get_baseline_dataset(x_train_filenames,
                                y_train_filenames,
                                preproc_fn=tr_preprocessing_fn,
                                batch_size=batch_size)

1 Ответ

0 голосов
/ 18 мая 2019

Я цитирую основные шаги из https://cs230 -stanford.github.io / tenorflow-input-data Я предлагаю вам просмотреть статью один раз для подробностей.

» Подводя итог, один хороший заказ для различных преобразований:

  1. создать набор данных
  2. shuffle (с достаточно большим размером буфера)
  3. повтор
  4. Карта с фактической работой (предварительная обработка, расширение ...) с использованием нескольких параллельных вызовов.
  5. партии
  6. упреждающей «

Это должно дать то, что вы хотите, потому что «увеличение» идет после «повтора». Надеюсь, это поможет.

...