У меня был вопрос об использовании batch, repeat и shuffle с tf.Dataset.
Мне не совсем ясно, как используются repeat и shuffle.Я понимаю, что .batch
будет диктовать, сколько примеров обучения будет стохастическим градиентным спуском, использование .repeat
и .shuffle
мне до сих пор не ясно.
Первый вопрос
Даже после просмотра здесь и здесь , .repeat
используется для повторения набора данных после выброса tf.errors.OutOfRangeError
.Следовательно, в моем коде это означает, что мне больше не нужно реализовывать:
try:
while True:
_ = sess.run(self.optimizer)
except tf.errors.OutOfRangeError:
pass
, потому что .repeat
будет автоматически повторять набор данных после его исчерпания?Когда это останавливается?или он никогда не остановится, и вам нужно будет просто выйти из цикла «True» по истечении определенного количества партий (скажем, 1000)?
Второй вопрос
Во-вторых, использование .shuffle
не имеет смысла для меня.Означает ли .shuffle.batch()
, что я имею, скажем, 100 000 сэмплов, случайно помещаю 1000 в буфер с .shuffle
, а затем, скажем, 100 из них с .batch()
.Насколько я понимаю, следующая партия будет использовать 999 из этих образцов и поместит 1 новый в буфер.Так что, если мои образцы не имеют порядка для них, тогда .shuffle
следует избегать всего вместе?И если .batch
используется, он все равно будет пакет 100 из этих 999 + 1 в буфере?
Третий вопрос
И, наконец, если я используюотдельный td.dataset
объект для тестирования, какой порядок .shuffle.batch()
мне следует учитывать?Прямо сейчас я использую:
sess.run(self.test_init)
try:
while True:
accuracy_batch = sess.run(self.accuracy)
except tf.errors.OutOfRangeError:
pass
С:
test_data = self.test_dataset.shuffle(self.batch_size).batch(self.batch_size)
В моем распоряжении более 110 000 учебных примеров, поэтому self.batch_size установит количество образцов, которые я хочу использоватьпроверь мою точностьИтак, если бы я хотел просто протестировать весь набор тестовых данных, я бы не использовал .batch
?Но так как он повторяется по всему набору данных с while True
, это не имеет значения?С использованием .shuffle
я заметил, что мои точности изменились, но без этого они были очень похожи.Это заставляет меня думать, что .shuffle
рандомизирует партию и может повторно использовать обучающие примеры?