#tensorflow #tf.keras #pruning #optuna
#tensorflow #тф.керас #обрезка #оптуна
Вопрос:
Я использую Optuna 2.5 для оптимизации пары гиперпараметров в модели tf.keras CNN. Я хочу использовать обрезку, чтобы оптимизация пропускала менее перспективные углы пространства гиперпараметров. Я использую что-то вроде этого:
study0 = optuna.create_study(study_name=study_name,
storage=storage_name,
direction='minimize',
sampler=TPESampler(n_startup_trials=25, multivariate=True, seed=123),
pruner=optuna.pruners.SuccessiveHalvingPruner(min_resource='auto',
reduction_factor=4, min_early_stopping_rate=0),
load_if_exists=True)
Иногда модель останавливается через 2 эпохи, в других случаях она останавливается через 12 эпох, 48 и так далее. Чего я хочу, так это убедиться, что модель всегда тренируется не менее 30 эпох, прежде чем ее обрезают. Я предполагаю, что параметр min_early_stopping_rate
может иметь некоторый контроль над этим, но я попытался изменить его с 0 на 30, и тогда модели никогда не будут обрезаны. Может кто-нибудь объяснить мне немного лучше, чем документация Optuna, что эти параметры в самом SuccessiveHalvingPruner()
деле делают (специально min_early_stopping_rate
)?
Спасибо
Ответ №1:
min_resource
в пояснении к документации говорится
Пробная версия никогда не обрезается, пока не выполнит
min_resource * reduction_factor ** min_early_stopping_rate
шаги.
Итак, я полагаю, что нам нужно заменить значение min_resource
на определенное число в зависимости от reduction_factor
и min_early_stopping_rate
.