Обновляйте параметры с помощью корневого среднего квадратного распространения (RMSProp)
Обновите сетевые настраиваемые параметры в пользовательском цикле обучения с помощью корневого среднего квадратного алгоритма распространения (RMSProp).
Примечание
Эта функция применяет алгоритм оптимизации RMSProp, чтобы обновить сетевые параметры в пользовательских циклах обучения, которые используют сети, определенные как dlnetwork
объекты или функции модели. Если вы хотите обучить сеть, определенную как Layer
массив или как LayerGraph
, используйте следующие функции:
Создайте TrainingOptionsRMSProp
использование объекта trainingOptions
функция.
Используйте TrainingOptionsRMSProp
объект с trainNetwork
функция.
[
обновляет настраиваемые параметры сети dlnet
,averageSqGrad
] = rmspropupdate(dlnet
,grad
,averageSqGrad
)dlnet
использование алгоритма RMSProp. Используйте этот синтаксис в цикле обучения, чтобы итерационно обновить сеть, заданную как dlnetwork
объект.
[
обновляет настраиваемые параметры в params
,averageSqGrad
] = rmspropupdate(params
,grad
,averageSqGrad
)params
использование алгоритма RMSProp. Используйте этот синтаксис в цикле обучения, чтобы итерационно обновить настраиваемые параметры сети, заданной с помощью функций.
[___] = rmspropupdate(___
также задает значения для глобальной скорости обучения, распада квадратного градиента и малого постоянного эпсилона, в дополнение к входным параметрам в предыдущих синтаксисах. learnRate
,sqGradDecay
,epsilon
)
rmspropupdate
Выполните один корневой шаг обновления среднего квадратного распространения с глобальной скоростью обучения 0.05
и квадратный коэффициент распада 0.95
.
Создайте параметры и градиенты параметров как числовые массивы.
params = rand(3,3,4); grad = ones(3,3,4);
Инициализируйте средний квадратный градиент для первой итерации.
averageSqGrad = [];
Задайте пользовательские значения для глобальной скорости обучения и квадратного коэффициента распада градиента.
learnRate = 0.05; sqGradDecay = 0.95;
Обновляйте настраиваемые параметры с помощью rmspropupdate
.
[params,averageSqGrad] = rmspropupdate(params,grad,averageSqGrad,learnRate,sqGradDecay);
rmspropupdate
Использование rmspropupdate
для обучения сети с помощью корневого алгоритма среднего квадратного распространения (RMSProp).
Загрузка обучающих данных
Загрузите обучающие данные цифр.
[XTrain,YTrain] = digitTrain4DArrayData; classes = categories(YTrain); numClasses = numel(classes);
Определите сеть
Определите сетевую архитектуру и задайте среднее значение изображения с помощью 'Mean'
опция на входном слое изображения.
layers = [ imageInputLayer([28 28 1], 'Name','input','Mean',mean(XTrain,4)) convolution2dLayer(5,20,'Name','conv1') reluLayer('Name', 'relu1') convolution2dLayer(3,20,'Padding',1,'Name','conv2') reluLayer('Name','relu2') convolution2dLayer(3,20,'Padding',1,'Name','conv3') reluLayer('Name','relu3') fullyConnectedLayer(numClasses,'Name','fc') softmaxLayer('Name','softmax')]; lgraph = layerGraph(layers);
Создайте dlnetwork
объект из графика слоев.
dlnet = dlnetwork(lgraph);
Задайте функцию градиентов модели
Создайте вспомогательную функцию modelGradients
, перечисленный в конце примера. Функция принимает dlnetwork
dlnet объекта
и мини-пакет входных данных dlX
с соответствующими метками Y
, и возвращает потерю и градиенты потери относительно настраиваемых параметров в dlnet
.
Настройка опций обучения
Задайте опции, которые будут использоваться во время обучения.
miniBatchSize = 128; numEpochs = 20; numObservations = numel(YTrain); numIterationsPerEpoch = floor(numObservations./miniBatchSize);
Обучите на графическом процессоре, если он доступен. Для использования графический процессор требуется Parallel Computing Toolbox™ и поддерживаемый графический процессор. Для получения информации о поддерживаемых устройствах смотрите Поддержку GPU by Release (Parallel Computing Toolbox).
executionEnvironment = "auto";
Визуализируйте процесс обучения на графике.
plots = "training-progress";
Обучите сеть
Обучите модель с помощью пользовательского цикла обучения. Для каждой эпохи перетасуйте данные и закольцовывайте по мини-пакетам данных. Обновляйте параметры сети с помощью rmspropupdate
функция. В конце каждой эпохи отобразите процесс обучения.
Инициализируйте график процесса обучения.
if plots == "training-progress" figure lineLossTrain = animatedline('Color',[0.85 0.325 0.098]); ylim([0 inf]) xlabel("Iteration") ylabel("Loss") grid on end
Инициализируйте квадратные средние градиенты.
averageSqGrad = [];
Обучите сеть.
iteration = 0; start = tic; for epoch = 1:numEpochs % Shuffle data. idx = randperm(numel(YTrain)); XTrain = XTrain(:,:,:,idx); YTrain = YTrain(idx); for i = 1:numIterationsPerEpoch iteration = iteration + 1; % Read mini-batch of data and convert the labels to dummy % variables. idx = (i-1)*miniBatchSize+1:i*miniBatchSize; X = XTrain(:,:,:,idx); Y = zeros(numClasses, miniBatchSize, 'single'); for c = 1:numClasses Y(c,YTrain(idx)==classes(c)) = 1; end % Convert mini-batch of data to a dlarray. dlX = dlarray(single(X),'SSCB'); % If training on a GPU, then convert data to a gpuArray. if (executionEnvironment == "auto" && canUseGPU) || executionEnvironment == "gpu" dlX = gpuArray(dlX); end % Evaluate the model gradients and loss using dlfeval and the % modelGradients helper function. [gradients,loss] = dlfeval(@modelGradients,dlnet,dlX,Y); % Update the network parameters using the RMSProp optimizer. [dlnet,averageSqGrad] = rmspropupdate(dlnet,gradients,averageSqGrad); % Display the training progress. if plots == "training-progress" D = duration(0,0,toc(start),'Format','hh:mm:ss'); addpoints(lineLossTrain,iteration,double(gather(extractdata(loss)))) title("Epoch: " + epoch + ", Elapsed: " + string(D)) drawnow end end end
Тестируйте сеть
Протестируйте классификационную точность модели путем сравнения предсказаний на тестовом наборе с истинными метками.
[XTest, YTest] = digitTest4DArrayData;
Преобразуйте данные в dlarray
с форматом размерности 'SSCB'
. Для предсказания графический процессор также преобразуйте данные в gpuArray
.
dlXTest = dlarray(XTest,'SSCB'); if (executionEnvironment == "auto" && canUseGPU) || executionEnvironment == "gpu" dlXTest = gpuArray(dlXTest); end
Чтобы классифицировать изображения с помощью dlnetwork
объект, используйте predict
функция и найти классы с самыми высокими счетами.
dlYPred = predict(dlnet,dlXTest); [~,idx] = max(extractdata(dlYPred),[],1); YPred = classes(idx);
Оцените точность классификации.
accuracy = mean(YPred==YTest)
accuracy = 0.9860
Функция градиентов модели
Функция помощника modelGradients
принимает dlnetwork
dlnet объекта
и мини-пакет входных данных dlX
с соответствующими метками Y,
и возвращает потери и градиенты потерь относительно настраиваемых параметров в dlnet
. Чтобы вычислить градиенты автоматически, используйте dlgradient
функция.
function [gradients,loss] = modelGradients(dlnet,dlX,Y) dlYPred = forward(dlnet,dlX); loss = crossentropy(dlYPred,Y); gradients = dlgradient(loss,dlnet.Learnables); end
dlnet
- Сетьdlnetwork
объектСеть, заданная как dlnetwork
объект.
Функция обновляет dlnet.Learnables
свойство dlnetwork
объект. dlnet.Learnables
- таблица с тремя переменными:
Layer
- Имя слоя, заданное как строковый скаляр.
Parameter
- Имя параметра, заданное как строковый скаляр.
Value
- Значение параметра, заданное как массив ячеек, содержащий dlarray
.
Входной параметр grad
должна быть таблицей той же формы, что и dlnet.Learnables
.
params
- Параметры, учитываемые в сетиdlarray
| числовой массив | массив ячеек | структуру | таблицуСетевые настраиваемые параметры, заданная как dlarray
, числовой массив, массив ячеек, структура или таблица.
Если вы задаете params
как таблица, она должна содержать следующие три переменные.
Layer
- Имя слоя, заданное как строковый скаляр.
Parameter
- Имя параметра, заданное как строковый скаляр.
Value
- Значение параметра, заданное как массив ячеек, содержащий dlarray
.
Можно задать params
как контейнер настраиваемых параметров для сети с помощью массива ячеек, структуры или таблицы или вложенных массивов ячеек или структур. Настраиваемые параметры в массиве ячеек, структуре или таблице должны быть dlarray
или числовые значения типа данных double
или single
.
Входной параметр grad
должны быть снабжены точно совпадающим типом данных, упорядоченным расположением и полями (для структур) или переменными (для таблиц), как params
.
Типы данных: single
| double
| struct
| table
| cell
grad
- Градиенты потерьdlarray
| числовой массив | массив ячеек | структуру | таблицуГрадиенты потерь, заданные как dlarray
, числовой массив, массив ячеек, структура или таблица.
Точная форма grad
зависит от входа сети или настраиваемых параметров. В следующей таблице показан необходимый формат для grad
для возможных входов в rmspropupdate
.
Вход | Настраиваемые параметры | Градиенты |
---|---|---|
dlnet | Табличные dlnet.Learnables содержащие Layer , Parameter , и Value переменные. The Value переменная состоит из массивов ячеек, которые содержат каждый настраиваемый параметр в виде dlarray . | Таблица с совпадающим типом данных, переменными и порядком, что и dlnet.Learnables . grad должен иметь Value переменная, состоящая из массивов ячеек, которые содержат градиент каждого настраиваемого параметра. |
params | dlarray | dlarray с совпадающим типом данных и порядком, что и params
|
Числовой массив | Числовой массив с совпадающим типом данных и порядком, что и params
| |
Массив ячеек | Массив ячеек с совпадающими типами данных, структурой и порядком, как params | |
Структура | Структура с совпадающими типами данных, полями и порядками, что и params | |
Таблица с Layer , Parameter , и Value переменные. The Value переменная должна состоять из массивов ячеек, которые содержат каждый настраиваемый параметр в виде dlarray . | Таблица с совпадающими типами данных, переменными и порядками, что и params . grad должен иметь Value переменная, состоящая из массивов ячеек, которые содержат градиент каждого настраиваемого параметра. |
Можно получить grad
из вызова в dlfeval
которая оценивает функцию, содержащую вызов на dlgradient
. Для получения дополнительной информации смотрите Использование автоматической дифференциации в Deep Learning Toolbox.
averageSqGrad
- Скользящее среднее градиентов квадратов параметров[]
| dlarray
| числовой массив | массив ячеек | структуру | таблицуСкользящее среднее значение градиентов квадратов параметра, заданное как пустой массив, a dlarray
, числовой массив, массив ячеек, структура или таблица.
Точная форма averageSqGrad
зависит от входа сети или настраиваемых параметров. В следующей таблице показан необходимый формат для averageSqGrad
для возможных входов в rmspropupdate
.
Вход | Настраиваемые параметры | Средние квадратные градиенты |
---|---|---|
dlnet | Табличные dlnet.Learnables содержащие Layer , Parameter , и Value переменные. The Value переменная состоит из массивов ячеек, которые содержат каждый настраиваемый параметр в виде dlarray . | Таблица с совпадающим типом данных, переменными и порядком, что и dlnet.Learnables . averageSqGrad должен иметь Value переменная, состоящая из массивов ячеек, которые содержат средний квадратный градиент каждого настраиваемого параметра. |
params | dlarray | dlarray с совпадающим типом данных и порядком, что и params
|
Числовой массив | Числовой массив с совпадающим типом данных и порядком, что и params
| |
Массив ячеек | Массив ячеек с совпадающими типами данных, структурой и порядком, как params | |
Структура | Структура с совпадающими типами данных, полями и порядками, что и params | |
Таблица с Layer , Parameter , и Value переменные. The Value переменная должна состоять из массивов ячеек, которые содержат каждый настраиваемый параметр в виде dlarray . | Таблица с совпадающими типами данных, переменными и порядками, что и params . averageSqGrad должен иметь Value переменная, состоящая из массивов ячеек, которые содержат средний квадратный градиент каждого настраиваемого параметра. |
Если вы задаете averageSqGrad
в качестве пустого массива функция не принимает предыдущих градиентов и запускается так же, как и для первого обновления в серии итераций. Чтобы итерационно обновить настраиваемые параметры, используйте averageSqGrad
выход предыдущего вызова на rmspropupdate
как averageSqGrad
вход.
learnRate
- Глобальная скорость обучения0.001
(по умолчанию) | положительная скалярная величинаГлобальная скорость обучения, заданная как положительная скалярная величина. Значение по умолчанию learnRate
является 0.001
.
Если вы задаете сетевые параметры как dlnetwork
, скорость обучения для каждого параметра является глобальной скоростью обучения, умноженной на соответствующее свойство коэффициента скорости обучения, заданное в слоях сети.
sqGradDecay
- Квадратный коэффициент градиента распада0.9
(по умолчанию) | положительная скалярная величина между 0
и 1
.Квадратный коэффициент распада градиента, заданный как положительная скалярная величина между 0
и 1
. Значение по умолчанию sqGradDecay
является 0.9
.
epsilon
- Малая константа1e-8
(по умолчанию) | положительная скалярная величинаМалая константа для предотвращения ошибок деления на нули, заданная как положительная скалярная величина. Значение по умолчанию epsilon
является 1e-8
.
dlnet
- Обновленная сетьdlnetwork
объектСеть, возвращается как dlnetwork
объект.
Функция обновляет dlnet.Learnables
свойство dlnetwork
объект.
params
- Обновленные настраиваемые параметры сетиdlarray
| числовой массив | массив ячеек | структуру | таблицуОбновлённые сетевые настраиваемые параметры, возвращенный как dlarray
, числовой массив, массив ячеек, структура или таблица с Value
переменная, содержащая обновленные настраиваемые параметры сети.
averageSqGrad
- Обновленное скользящее среднее градиентов квадратов параметровdlarray
| числовой массив | массив ячеек | структуру | таблицуОбновлённое среднее значение квадратов градиентов параметра, возвращенная как dlarray
, числовой массив, массив ячеек, структура или таблица.
Функция использует корневой алгоритм среднего квадрата распространения, чтобы обновить настраиваемые параметры. Для получения дополнительной информации смотрите определение алгоритма RMSProp под Стохастическим градиентным спуском на trainingOptions
страница с описанием.
rmspropupdate
квадратный коэффициент распада градиента по умолчанию является 0.9
Поведение изменено в R2020a
Начиная с R2020a, значение по умолчанию квадратного фактора градиента распада в rmspropupdate
является 0.9
. В предыдущих версиях значение по умолчанию было 0.999
. Чтобы воспроизвести предыдущее поведение по умолчанию, используйте один из следующих синтаксисов:
[dlnet,averageSqGrad] = rmspropupdate(dlnet,grad,averageSqGrad,0.001,0.999) [params,averageSqGrad] = rmspropupdate(params,grad,averageSqGrad,0.001,0.999)
Указания и ограничения по применению:
Когда по крайней мере один из следующих входных параметров является gpuArray
или dlarray
с базовыми данными типа gpuArray
эта функция выполняется на графическом процессоре.
grad
averageSqGrad
params
Для получения дополнительной информации смотрите Запуск функций MATLAB на графическом процессоре (Parallel Computing Toolbox).
adamupdate
| dlarray
| dlfeval
| dlgradient
| dlnetwork
| dlupdate
| forward
| sgdmupdate
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.