Каково использование train_on_batch() в keras?

Чем train_on_batch() отличается от fit()? В каких случаях мы должны использовать train_on_batch()?

Ответ 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 для партии, и т.д., Теперь вы тренировались на всем своем наборе и можете точно контролировать, сколько и что вашего набора данных обучает вашу модель. Затем вы можете определить свои собственные эпохи, размеры пакетов и т.д. С помощью простых циклов и функций, чтобы извлечь их из набора данных.