pytorch источник адам

О функции оптимальной настройки
Удалить пакет: https://ptorch.com/docs/1/optim

класс torch.optim.Optimizer (PARAMS, по умолчанию)
базовый класс для всех оптимизации.

Параметры:

Титулы (итерация) - Итерация переменного или могут Сыроватское. Укажите , какие переменные должны быть оптимизированы.
defaults- (ДИКТ): Dict по умолчанию включает в себя параметры оптимизации (установить параметр не задан параметр параметров будет использовать значение по умолчанию).
load_state_dict (state_dict)
загрузки состояния оптимизатор

Параметры:

state_dict (ДИКТ) - государственный оптимизатор. Следует state_dict () объекта звонки возвращаются.
state_dict ()
состояние оптимизатор возвращает Dict.

Он содержит два элемента:

состояние - ДИКТ удерживать текущее состояние оптимизации. Он содержит различие между оптимизированным классом.
param_groups - это ДИКТ содержит все установленные параметры.
шаг (закрытие) ,
чтобы выполнить один шаг оптимизации (обновление параметров).

Различные оптимизации Операторы
Ссылка: Мо раздражает видео Великий Бог, не дают прямой Baidu поисковый портал , как;

Во-первых, четыре основной замены операторы оптимизированный код:

SGD стохастический градиентный спуск

opt_SGD = torch.optim.SGD (net_SGD.parameters (), LR = LR)

импульс ускоряется импульс, импульс может определить значение функции в синге

opt_Momentum = torch.optim.SGD (net_Momentum.parameters (), LR = LR, импульс = 0,8)

RMSprop указать параметры альфа

opt_RMSprop = torch.optim.RMSprop (net_RMSprop.parameters (), LR = LR, альфа = 0,9)

Адам параметры бета = (0,9, 0,99)

= Torch.optim.Adam opt_Adam (net_Adam.parameters (), LR = LR, беты = (0,9, 0,99))
# посмотреть на официальном документе
класса torch.optim.Adam (PARAMS, Л.Р. = 0,001 , беты = (0,9, 0,999), EPS = 1e-08 , weight_decay = 0) [источник]
для достижения алгоритма Адам.
Это Адам: представлены в методе стохастической оптимизации.

# Параметры:

params (iterable) – 用于优化的可以迭代参数或定义参数组
lr (float, 可选) – 学习率(默认:1e-3)
betas (Tuple[float, float], 可选) – 用于计算梯度运行平均值及其平方的系数(默认:0.9,    0.999)
eps (float, 可选) – 增加分母的数值以提高数值稳定性(默认:1e-8)
weight_decay (float, 可选) – 权重衰减(L2范数)(默认: 0)
step(closure)  #执行单个优化步骤。

# Параметры:

closure (callable,可选) – 重新评估模型并返回损失的闭包。

Примечание: импульс метод градиентного спуска является общим ускорением. Для общего SGD, выражение, уменьшение в отрицательном направлении градиента. Синг и картина с термином импульса имеет вид:

То есть, когда коэффициент импульса, популярное понимание приведенной выше формулы, если последний импульс (то есть), и на этот раз отрицательного направление градиента то же самое, что величина спада будут увеличиваться, так что это может быть достигнуто ускорением сходимости процесс.

О изучении настройки скорости
первой в начале времени мы можем дать нашу нейронную сеть прикрепить «опытную» скорость обучения:

Л.Р. = 1e-3 #SGD

Л.Р. = 1e-3 #Adam обычно требуют сравнительно небольшой скорости обучения

Далее предположим, что для различных слоев хотят дать разные скорости обучения, как это сделать?

Справка: https://www.cnblogs.com/hellcat/p/8496727.html

# Прямое развитие различных модулей для другой сети обучения classifiter скорости Скорость обучения устанавливается в 1e-2, все из импульса = 0,9

Оптимизатор = optim.SGD ([{ 'PARAMS': net.features.parameters ()}, #默认Л.Р.是1e-5
{ 'PARAMS': net.classifiter.parameters (), 'Л.Р.': 1e-2}] , Л.Р. = 1e-5, импульс = 0,9)

## ======================= единицы уровня, чтобы указать различные ставки для различных слоев обучения

Извлечение указанного объекта слоя ## модуля classifiter 0th и 3-й

special_layers = t.nn.ModuleList ([net.classifiter [0], net.classifiter [3]])

Получают параметры идентификатора уровня ##

special_layers_params = список (карта (ID, special_layers.parameters ()))
печать (special_layers_params)

## параметры сбора ID неопределенный слой

Фильтр = base_params (лямбда Р: Не в special_layers_params id§, net.parameters ())
Оптимизатор t.optim.SGD = ([{ 'на' PARAMS: base_params},
{ 'на' PARAMS: special_layers.parameters (), 'LR' : 0,01}], Л.Р. = 0,001 ) ,
когда вы обнаружите потерю в процессе обучения на самом деле воскресшего, так вообще говоря, ты в это время скорость обучения устанавливается слишком большой. На этот раз нам нужно настроить нашу динамическую скорость обучения:

Защиту adjust_learning_rate (оптимизатор, эпоха, т = 10):
«» «Устанавливает скорость в начальной LR распалась на 10 обучение каждых т эпох, по умолчанию = 10" »»
new_lr = Л.Р. * (0,1 ** (эпоха // т) )
для param_group в optimizer.param_groups:
param_group [ 'Л.Р.'] = new_lr
官方文档中还给出用

torch.optim.lr_scheduler предоставляет ряд методов, основанных на количестве циклов для регулировки скорости обучения.

torch.optim.lr_scheduler.ReduceLROnPlateau на основе результата аутентификации измерения, чтобы установить различную скорость обучения.

Справка: https://ptorch.com/docs/1/optim

Другая стратегия настройки параметров
1.L2- регуляризация предотвращает более облегающая

вес распад (вес распада), конечная цель состоит в том, чтобы предотвратить чрезмерно фитинг. В машинном обучении или распознавании образов, будет переобучение, а когда сеть постепенно переобучения сети весов постепенно становится больше, и, следовательно, для того, чтобы избежать переобучений, функция ошибки будет добавить термин наказания обычно используются термин тяжелого наказания собственности квадрат умноженной на постоянной распада суммы. Он используется для наказания больших весов. В функции потерь, вес распад на сроке регуляризации (регуляризация) коэффициент приведенных выше, регуляризация термин сложности обычно указует модель, так что вес распад роли заключается в регулировании влияния сложности модели функции потерь, если вес большого распад , значение потери функции сложных моделей и больших.

Это определяется оптимизатором, когда параметр [weight_decay, 0,0005], чтобы установить общие рекомендации:

= Torch.optim.Adam opt_Adam (net_Adam.parameters (), LR = LR, бета = (0,9, 0,99), EPS = 1Е-06, weight_decay = 0,0005)
2, ПАРТИЯ Нормализация. ПАРТИЯ нормализация относится к передней части функции активации в нейронной сети, будет в соответствии с особенностями нормализации, выгоды от этого в три раза:

Увеличение градиента в потоке сети. Нормализация может быть сделана , в котором все масштабируется до [0,1], поэтому ретроградное время распространения составляет около 1, чтобы избежать явления исчезновения градиента.
Повышение скорости обучения. Данные нормированы быстро достичь конвергенции.
Уменьшить зависимость от инициализации модели обучения.
Выбор параметров зависит снижение
некоторых обычного объяснения: https://blog.csdn.net/hjimce/article/details/50866313

3, был добавлен отсев слой: обычно устанавливается до 0,5 отсева

4, комплексный подход

Наконец, в процессе обучения по потере некоторых заметок:

Справка: https://blog.csdn.net/LIYUAN123ZHOUHUI/article/details/74453980
1 Поезд потери снижаются, потеря теста снижается, что указывает на то , что сеть обучения
2 потери поезда снижение, потеря тест имеет тенденцию быть неизменным, что свидетельствует о том , что сеть была фитинга
3 потери поезда имеет тенденцию быть постоянным, потеря теста имеет тенденцию быть неизменной, что указывает на обучение столкнулись с проблемой, необходимо уменьшить скорость обучения или размер пакета
4 потери поезда имеет тенденцию быть постоянным, потеря тестового снижается, что свидетельствует о том , что набор данных 100% там проблема
растет потеря поезда 5, потеря теста растет ( в конечном счете , становится NaN), структура сети может быть плохо разработана, в результате чего поезда над неправильной установкой параметров, такие как проблема программы ошибки

Автор: angnuan123
Источник: CSDN
Оригинал: https://blog.csdn.net/angnuan123/article/details/81604727
Copyright: Эта статья является блоггер оригинал статьи, воспроизведены, пожалуйста , приложите Боуэн ссылку!

Статьи по Теме

рекомендация

отwww.cnblogs.com/jfdwd/p/11239564.html