TensorFlow Dataset.shuffle — большой набор данных

Я использую TensorFlow 1.2 с набором данных в файле TFRecord 20G. В этом файле TFRecord около полумиллиона сэмплов.

Похоже, если я выберу значение меньше, чем количество записей в наборе данных для buffer_size, будут использоваться только первые N записей в TFRecord. https://www.tensorflow.org/api_docs/python/tf/contrib/data/Dataset#shuffle

Например, если buffer_size = 100, кажется, что используются только первые 100 записей.

Вопрос

Должен ли buffer_size всегда быть длиной набора данных? Не повлияет ли это на эффективность тренировок?


person rodrigo-silveira    schedule 12.12.2017    source источник


Ответы (1)


Независимо от того, какой размер буфера вы выберете, будут использоваться все сэмплы, это влияет только на случайность перемешивания.

Если размер буфера равен 100, это означает, что Tensorflow сохранит буфер для следующих 100 сэмплов и случайным образом выберет один из этих 100 семплов. затем он добавляет следующий элемент в буфер.

таким образом, если buffer_size = 1, перемешивания нет вообще, а если buffer_size > data_set_size, гарантировано идеальное равномерное случайное перемешивание.

Я настоятельно рекомендую перетасовать набор данных перед созданием TFrecords и сохранить небольшой размер буфера.

person Matan Hugi    schedule 12.12.2017
comment
Значит ли buffer_size, что эти записи будут в памяти? Почему вы предлагаете сделать его маленьким? - person rodrigo-silveira; 13.12.2017
comment
Это зависит от размера каждой выборки. по моему опыту, начинать обучение нужно долго, когда размер буфера равен 10 000 и каждый образец представляет собой изображение. - person Matan Hugi; 13.12.2017
comment
пожалуйста, взгляните на 46444018 чтобы лучше понять лежащее в основе поведение - person Max F.; 27.02.2018