#tensorflow
#тензорный поток
Вопрос:
В руководстве по tensorflow я видел, что набор данных просто перетасован, как
AUTOTUNE = tf.data.experimental.AUTOTUNE
train_ds = train_ds.cache().shuffle(1000).prefetch(buffer_size=AUTOTUNE)
Но я также вижу чужие коды, такие как:
ds = ds.cache()
ds = ds.repeat() # ds is a dataset
ds = ds.shuffle(buffer_size=1000)
Я предполагаю, что технически набор данных будет использоваться после каждой эпохи обучения и должен быть повторен для загрузки в буфер перемешивания для следующей эпохи.
Но почему первое руководство работает без повтора? Должен ли я вызывать ds repeat явно или нет?
Ответ №1:
Итак, основываясь на документации, repeat определяет, сколько раз выборки могут быть повторены в данном наборе данных.
dataset = tf.data.Dataset.from_tensor_slices([1, 2, 3])
dataset = dataset.repeat(3)
list(dataset.as_numpy_iterator())
[1,2,3,1,2,3,1,2,3]
В идеале в вашем случае вам не придется повторять набор данных. Только если вы хотите просмотреть несколько его выборок, это имеет значение. И в соответствии с вашим shuffle, он просто перетасует набор данных после его повторения. И, пожалуйста, укажите какой-нибудь аргумент или значение в repeat()
, не оставляйте его None.
Комментарии:
1. Спасибо, но я не вижу в документации формулировки типа «в данную эпоху или при прохождении обучения»?
2. Я использовал тренировочный проход или эпоху, потому что это в конечном итоге зависит от того, как используется набор данных. Если вы производите перетасовку в каждую эпоху или после нее и не хотите никакого увеличения, вам не нужно будет использовать
repeat
. И не используйте repeat с пустым значением count, так как он будет продолжать создавать повторяющиеся экземпляры до тех пор, пока размер буфера не будет заполнен. Также я удалюgiven epoch or training pass
, поскольку это может сбивать с толку