Обновите параметры с помощью пользовательской функции
dlupdate
Выполните регуляризацию L1 на структуре градиентов параметра.
Создайте демонстрационные входные данные.
dlX = dlarray(rand(100,100,3),'SSC');
Инициализируйте learnable параметры для операции свертки.
params.Weights = dlarray(rand(10,10,3,50)); params.Bias = dlarray(rand(50,1));
Вычислите градиенты для операции свертки с помощью функции помощника convGradients
, заданный в конце этого примера.
grads = dlfeval(@convGradients,dlX,params);
Задайте фактор регуляризации.
L1Factor = 0.001;
Создайте анонимную функцию, которая упорядочивает градиенты. При помощи анонимной функции, чтобы передать скалярную константу функции, можно избежать необходимости расширять постоянное значение до того же размера и структуры как переменная параметра.
L1Regularizer = @(grad,param) grad + L1Factor.*sign(param);
Используйте dlupdate
чтобы применить регуляризацию функционируют к каждому из градиентов.
grads = dlupdate(L1Regularizer,grads,params);
Градиенты в grads
теперь упорядочены согласно функциональному L1Regularizer
.
convGradients
Функция
convGradients
функция помощника берет learnable параметры операции свертки и мини-пакет входных данных dlX
, и возвращает градиенты относительно learnable параметров.
function grads = convGradients(dlX,params) dlY = dlconv(dlX,params.Weights,params.Bias); dlY = sum(dlY,'all'); grads = dlgradient(dlY,params); end
dlupdate
обучать сеть Используя пользовательскую функцию обновленияИспользуйте dlupdate
обучать сеть с помощью пользовательской функции обновления, которая реализует стохастический алгоритм градиентного спуска (без импульса).
Загрузите обучающие данные
Загрузите обучающие данные цифр.
[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')]; lgraph = layerGraph(layers);
Создайте dlnetwork
объект из графика слоя.
dlnet = dlnetwork(lgraph);
Задайте функцию градиентов модели
Создайте функциональный modelGradients
, перечисленный в конце этого примера, который берет dlnetwork
объект dlnet
и мини-пакет входных данных dlX
с соответствием маркирует Y
, и возвращает потерю и градиенты потери относительно learnable параметров в dlnet
.
Задайте стохастическую функцию градиентного спуска
Создайте функциональный sgdFunction
, перечисленный в конце этого примера, который берет param
и paramGradient
, learnable параметр и градиент потери относительно того параметра, соответственно. Функция возвращает обновленный параметр с помощью стохастического алгоритма градиентного спуска, выраженного как
где номер итерации, темп обучения, вектор параметра, и функция потерь.
Задайте опции обучения
Задайте опции, чтобы использовать во время обучения.
miniBatchSize = 128; numEpochs = 20; numObservations = numel(YTrain); numIterationsPerEpoch = floor(numObservations./miniBatchSize);
Обучайтесь на графическом процессоре, если вы доступны. Используя графический процессор требует Parallel Computing Toolbox™, и CUDA® включил NVIDIA®, графический процессор с вычисляет возможность 3.0 или выше.
executionEnvironment = "auto";
Инициализируйте скоростной параметр.
learnRate = 0.001;
Инициализируйте график процесса обучения.
plots = "training-progress"; if plots == "training-progress" iteration = 1; figure lineLossTrain = animatedline; xlabel("Total Iterations") ylabel("Loss") end
Обучите сеть
Обучите модель с помощью пользовательского учебного цикла. В течение каждой эпохи переставьте данные и цикл по мини-пакетам данных. Обновите сетевые параметры путем вызова dlupdate
с функциональным sgdFunction
заданный в конце этого примера. В конце каждой эпохи отобразите прогресс обучения.
for epoch = 1:numEpochs % Shuffle data. idx = randperm(numel(YTrain)); XTrain = XTrain(:,:,:,idx); YTrain = YTrain(idx); for i = 1:numIterationsPerEpoch % 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 dlarray. dlX = dlarray(single(X),'SSCB'); % If training on a GPU, then convert data to gpuArray. if (executionEnvironment == "auto" && canUseGPU) || executionEnvironment == "gpu" dlX = gpuArray(dlX); end % Evaluate the model gradients and loss using dlfeval and the % modelGradients function. [grad,loss] = dlfeval(@modelGradients,dlnet,dlX,Y); % Update the network parameters using the SGD algorithm defined in the % function sgdFunction. dlnet = dlupdate(@sgdFunction,dlnet,grad); % Display the training progress. if plots == "training-progress" addpoints(lineLossTrain,iteration,double(gather(extractdata(loss)))) title("Loss During Training: Epoch - " + epoch + "; Iteration - " + i) drawnow iteration = iteration + 1; 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.7282
Функция градиентов модели
Функциональный modelGradients
берет dlnetwork
объект dlnet
и мини-пакет входных данных dlX
с соответствием маркирует Y,
и возвращает потерю и градиенты потери относительно learnable параметров в dlnet
. Чтобы вычислить градиенты автоматически, используйте dlgradient
функция.
function [gradients,loss] = modelGradients(dlnet,dlX,Y) dlYPred = forward(dlnet,dlX); dlYPred = softmax(dlYPred); loss = crossentropy(dlYPred,Y); gradients = dlgradient(loss,dlnet.Learnables); end
Стохастическая функция градиентного спуска
Функциональный sgdFunction
берет param
и paramGradient
, learnable параметр и градиент потери относительно того параметра, и возвращают обновленный параметр с помощью стохастического алгоритма градиентного спуска, выраженного как
где номер итерации, темп обучения, вектор параметра, и функция потерь.
function param = sgdFunction(param,paramGradient) learnRate = 0.01; param = param - learnRate.*paramGradient; end
fun
— Функция, чтобы применятьсяФункция, чтобы примениться к learnable параметрам, определенному функцией указателю.
dlupate
оценивает fun
каждым сетевым learnable параметром как вход. fun
оценивается так же много раз, как существуют массивы learnable параметров в dlnet
или params
.
dlnet
— Сетьdlnetwork
объектСеть, заданная как dlnetwork
объект.
Функция обновляет dlnet.Learnables
свойство dlnetwork
объект. dlnet.Learnables
таблица с тремя переменными:
Layer
— Имя слоя, заданное как скаляр строки.
Parameter
— Название параметра, заданное как скаляр строки.
Value
— Значение параметра, заданного как массив ячеек, содержащий dlarray
.
params
— Сетевые learnable параметрыdlarray
| числовой массив | массив ячеек | структура | таблицаСетевые learnable параметры, заданные как dlarray
, числовой массив, массив ячеек, структура или таблица.
Если вы задаете params
как таблица, это должно содержать следующие три переменные.
Layer
— Имя слоя, заданное как скаляр строки.
Parameter
— Название параметра, заданное как скаляр строки.
Value
— Значение параметра, заданного как массив ячеек, содержащий dlarray
.
Можно задать params
как контейнер learnable параметров для вашей сети с помощью массива ячеек, структуры, или таблицы, или вложенных массивов ячеек или структур. learnable параметрами в массиве ячеек, структуре или таблице должен быть dlarray
или числовые значения типа данных double
или single
.
Входной параметр grad
должен быть обеспечен точно совпадающим типом данных, упорядоченным расположением и полями (для структур) или переменные (для таблиц) как params
.
Типы данных: single
| double
| struct
| table
| cell
A1,...,An
— Дополнительные входные параметрыdlarray
| числовой массив | массив ячеек | структура | таблицаДополнительные входные параметры к fun
, заданный как dlarray
объекты, числовые массивы, массивы ячеек, структуры или таблицы с Value
переменная.
Точная форма A1,...,An
зависит от входа сетевые или learnable параметры. Следующая таблица показывает требуемый формат для A1,...,An
для возможных входных параметров к dlupdate
.
Входной параметр | Параметры Learnable | A1,...,An |
---|---|---|
dlnet | Таблица dlnet.Learnables содержа Layer , Parameter , и Value переменные. Value переменная состоит из массивов ячеек, которые содержат каждый learnable параметр как dlarray . | Таблица с совпадающим типом данных, переменными, и заказывающий как dlnet.Learnables . A1,...,An должен иметь Value переменная, состоящая из массивов ячеек, которые содержат дополнительные входные параметры для функционального fun применяться к каждому learnable параметру. |
params | dlarray | dlarray с совпадающим типом данных и заказывающий как params
|
Числовой массив | Числовой массив с совпадающим типом данных и заказывающий как params
| |
CellArray | Массив ячеек с совпадающими типами данных, структурой, и заказывающий как params | |
Структура | Структура с совпадающими типами данных, полями, и заказывающий как params | |
Таблица с Layer , Parameter , и Value переменные. Value переменная должна состоять из массивов ячеек, которые содержат каждый learnable параметр как dlarray . | Таблица с совпадающими типами данных, переменными и заказывающий как params . A1,...,An должен иметь Value переменная, состоящая из массивов ячеек, которые содержат дополнительный входной параметр для функционального fun применяться к каждому learnable параметру. |
dlnet
— Сеть Updateddlnetwork
объектСеть, возвращенная как dlnetwork
объект.
Функция обновляет dlnet.Learnables
свойство dlnetwork
объект.
params
— Обновленные сетевые learnable параметрыdlarray
| числовой массив | массив ячеек | структура | таблицаОбновленные сетевые learnable параметры, возвращенные как dlarray
, числовой массив, массив ячеек, структура или таблица с Value
переменная, содержащая обновленные learnable параметры сети.
X1,...,Xm
— Дополнительные выходные аргументыdlarray
| числовой массив | массив ячеек | структура | таблицаДополнительные выходные аргументы от функционального fun
, где fun
указатель на функцию к функции, которая возвращает несколько выходных параметров, возвращенных как dlarray
объекты, числовые массивы, массивы ячеек, структуры или таблицы с Value
переменная.
Точная форма X1,...,Xm
зависит от входа сетевые или learnable параметры. Следующая таблица показывает возвращенный формат X1,...,Xm
для возможных входных параметров к dlupdate
.
Входной параметр | Параметры Learnable | X1,...,Xm |
---|---|---|
dlnet | Таблица dlnet.Learnables содержа Layer , Parameter , и Value переменные. Value переменная состоит из массивов ячеек, которые содержат каждый learnable параметр как dlarray . | Таблица с совпадающим типом данных, переменными, и заказывающий как dlnet.Learnables . X1,...,Xm имеет Value переменная, состоящая из массивов ячеек, которые содержат дополнительные выходные аргументы функционального fun примененный каждый learnable параметр. |
params | dlarray | dlarray с совпадающим типом данных и заказывающий как params
|
Числовой массив | Числовой массив с совпадающим типом данных и заказывающий как params
| |
CellArray | Массив ячеек с совпадающими типами данных, структурой, и заказывающий как params | |
Структура | Структура с совпадающими типами данных, полями, и заказывающий как params
| |
Таблица с Layer , Parameter , и Value переменные. Value переменная должна состоять из массивов ячеек, которые содержат каждый learnable параметр как dlarray . | Таблица с совпадающими типами данных, переменными. и упорядоченное расположение как params . X1,...,Xm имеет Value переменная, состоящая из массивов ячеек, которые содержат дополнительный выходной аргумент функционального fun примененный каждый learnable параметр. |
adamupdate
| dlarray
| dlfeval
| dlgradient
| dlnetwork
| rmspropupdate
| sgdmupdate
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.