Метод train_on_batch
Метод train_on_batch применяется к модели Keras
для выполнения одного шага обучения на одной партии
данных. Первым параметром передается тензор входных
данных x, вторым - тензор целевых значений
y. Третьим параметром можно передать словарь
sample_weight для взвешивания образцов.
Четвертым - class_weight для взвешивания классов.
Пятым - reset_metrics, который сбрасывает
состояние метрик перед шагом. Шестым - return_dict,
который возвращает результат в виде словаря.
Метод возвращает скаляр потерь или список, содержащий
потери и значения метрик, если метрики заданы.
В отличие от метода fit, который обучает
модель на протяжении нескольких эпох, train_on_batch
выполняет ровно один шаг градиентного спуска.
Перед вызовом метода модель должна быть скомпилирована
через compile.
Синтаксис
model.train_on_batch(x, y, sample_weight=None, class_weight=None, reset_metrics=True, return_dict=False)
Пример
Давайте создадим простую модель, скомпилируем ее и выполним один шаг обучения на партии данных:
import tensorflow as tf
tf.random.set_seed(0)
model = tf.keras.Sequential([
tf.keras.layers.Dense(1, input_shape=(1,))
])
model.compile(optimizer='sgd', loss='mse')
x = tf.constant([[1.0], [2.0], [3.0]])
y = tf.constant([[2.0], [4.0], [6.0]])
loss = model.train_on_batch(x, y)
print(loss)
Результат выполнения кода:
3.5627367
Пример
Давайте добавим метрику mae и посмотрим,
как метод возвращает список значений:
import tensorflow as tf
tf.random.set_seed(0)
model = tf.keras.Sequential([
tf.keras.layers.Dense(1, input_shape=(1,))
])
model.compile(optimizer='sgd', loss='mse', metrics=['mae'])
x = tf.constant([[1.0], [2.0], [3.0]])
y = tf.constant([[2.0], [4.0], [6.0]])
res = model.train_on_batch(x, y)
print(res)
Результат выполнения кода:
[3.5627367, 1.7842937]
Пример
Давайте используем параметр return_dict,
чтобы получить результат в виде словаря:
import tensorflow as tf
tf.random.set_seed(0)
model = tf.keras.Sequential([
tf.keras.layers.Dense(1, input_shape=(1,))
])
model.compile(optimizer='sgd', loss='mse', metrics=['mae'])
x = tf.constant([[1.0], [2.0], [3.0]])
y = tf.constant([[2.0], [4.0], [6.0]])
res = model.train_on_batch(x, y, return_dict=True)
print(res)
Результат выполнения кода:
{'loss': 3.5627367, 'mae': 1.7842937}
Пример
Давайте передадим sample_weight,
чтобы задать вес каждому образцу в партии:
Результат выполнения кода:
2.9254994
Пример
Давайте выполним несколько шагов обучения в цикле, чтобы уменьшить значение потерь:
import tensorflow as tf
tf.random.set_seed(0)
model = tf.keras.Sequential([
tf.keras.layers.Dense(1, input_shape=(1,))
])
model.compile(optimizer='sgd', loss='mse')
x = tf.constant([[1.0], [2.0], [3.0]])
y = tf.constant([[2.0], [4.0], [6.0]])
for i in range(5):
loss = model.train_on_batch(x, y)
print(loss)
Результат выполнения кода:
3.5627367
2.0349717
1.2912165
0.8698077
0.6132918
Смотрите также
-
метод
fit,
который обучает модель на протяжении нескольких эпох -
метод
test_on_batch,
который оценивает модель на одной партии данных -
метод
predict_on_batch,
который возвращает предсказания для одной партии данных -
метод
compile,
который настраивает модель для обучения