Чем train_on_batch()
отличается от fit()
? В каких случаях мы должны использовать train_on_batch()
?
Каково использование train_on_batch() в keras?
Ответ 1
На этот вопрос это простой ответ от основного автора:
С помощью
fit_generator
вы можете использовать генератор для данных проверки как Что ж. В общем, я бы рекомендовал использоватьfit_generator
, но используяtrain_on_batch
тоже отлично работает. Эти методы существуют только ради удобство в разных случаях использования, нет "правильного" метода.
train_on_batch
позволяет вам явно обновлять веса на основе предоставленной вами выборки, независимо от фиксированного размера партии. Вы бы использовали это в тех случаях, когда это то, что вы хотите: тренироваться на явном наборе образцов. Вы можете использовать этот подход, чтобы поддерживать свою собственную итерацию в нескольких пакетах традиционного обучающего набора, но позволить fit
или fit_generator
повторять пакеты для вас, вероятно, проще.
Одним из случаев, когда было бы целесообразно использовать train_on_batch
, является обновление предварительно обученной модели в одной новой партии образцов. Предположим, вы уже обучили и развернули модель, и через некоторое время вы получили новый набор обучающих образцов, которые ранее никогда не использовались. Вы можете использовать train_on_batch
для непосредственного обновления существующей модели только на этих выборках. Другие методы также могут сделать это, но для этого случая достаточно использовать train_on_batch
.
Помимо особых случаев, подобных этому (либо если у вас есть какая-то педагогическая причина для поддержания собственного курсора в разных пакетах обучения, либо для какого-либо полуавтоматического обновления обучения в специальной серии), вероятно, лучше всегда использовать fit
(для данных, которые помещаются в память) или fit_generator
(для потоковой передачи пакетов данных в качестве генератора).
Ответ 2
train_on_batch()
дает вам больший контроль над состоянием LSTM, например, при использовании LSTM с контролем состояния и необходимости управления вызовами model.reset_states()
. У вас могут быть многосерийные данные и необходимо сбросить состояние после каждой серии, что вы можете сделать с помощью train_on_batch()
, но если вы использовали .fit()
тогда сеть будет обучаться по всей серии данных без сброса состояния, Там нет правильного или неправильного, это зависит от того, какие данные вы используете, и как вы хотите, чтобы сеть вела себя.
Ответ 3
Train_on_batch также увидит увеличение производительности по сравнению с генератором подгонки и подгонки, если вы используете большие наборы данных и не имеете легко сериализуемых данных (например, высокоуровневых массивов) для записи в tfrecords.
В этом случае вы можете сохранить массивы в виде пустых файлов и загрузить меньшие их подмножества (traina.npy, trainb.npy и т.д.) В память, когда весь набор не помещается в память. Затем вы можете использовать tf.data.Dataset.from_tensor_slices, а затем использовать train_on_batch со своим поднабором данных, затем загрузить другой набор данных и снова вызывать train для партии, и т.д., Теперь вы тренировались на всем своем наборе и можете точно контролировать, сколько и что вашего набора данных обучает вашу модель. Затем вы можете определить свои собственные эпохи, размеры пакетов и т.д. С помощью простых циклов и функций, чтобы извлечь их из набора данных.