Ранняя остановка в TensorFlow
Ранняя остановка следит
за выбранной величиной на
эпохе и прерывает прогон,
если улучшение не появлялось
заданное число раз подряд.
Класс EarlyStopping
передают списком обратных
вызовов в метод fit.
Линейная зависимость в трёх точках быстро сходится; зададим высокий порог улучшения и короткое терпение, чтобы прогон закончился раньше запланированного предела эпох:
import tensorflow as tf
import numpy as np
tf.keras.utils.set_random_seed(0)
model = tf.keras.Sequential([
tf.keras.layers.Dense(1, input_shape=(1,)),
])
model.compile(
optimizer=tf.keras.optimizers.SGD(
learning_rate=0.1
),
loss=tf.keras.losses.MeanSquaredError(),
)
features = np.array(
[[1.0], [2.0], [3.0]], dtype=np.float32
)
targets = np.array(
[[2.0], [4.0], [6.0]], dtype=np.float32
)
stop = tf.keras.callbacks.EarlyStopping(
monitor="loss",
patience=2,
min_delta=0.01,
)
history = model.fit(
features,
targets,
epochs=100,
verbose=0,
callbacks=[stop],
)
print(len(history.history["loss"]))
# выведет 5
Подготовьте одновыходную
модель и обучите её на
пяти парах (0, 0),
(1, 2), (2, 4),
(3, 6), (4, 8)
с остановкой при отсутствии
прогресса. Выведите, сколько
эпох реально выполнилось.
Задайте терпение 1
и минимальное улучшение
0.05 для слежения
за ошибкой. Проведите
обучение на трёх точках
с линейной зависимостью
и выведите длину журнала
ошибки по эпохам.
Соберите модель для одного
признака, подключите
обратный вызов ранней
остановки и запустите
до 50 эпох на
своей таблице чисел.
Выведите число записей
в истории обучения.