В этом примере показано, как обучить нейронную сеть для глубокого обучения регрессии при помощи Experiment Manager. В этом примере вы используете модель регрессии, чтобы предсказать углы вращения рукописных цифр. Пользовательская метрическая функция определяет часть угловых предсказаний в приемлемом допуске на погрешность от истинных углов. Для получения дополнительной информации об использовании модели регрессии смотрите, Обучают Сверточную нейронную сеть Регрессии.
Во-первых, откройте пример. Experiment Manager загружает проект с предварительно сконфигурированным экспериментом, который можно смотреть и запустить. Чтобы открыть эксперимент, в панели Браузера Эксперимента, дважды кликают имя эксперимента (RegressionExperiment
).
Встроенные учебные эксперименты состоят из описания, таблицы гиперпараметров, функции настройки и набора метрических функций, чтобы оценить результаты эксперимента. Для получения дополнительной информации смотрите, Конфигурируют Встроенный Учебный Эксперимент.
Поле Description содержит текстовое описание эксперимента. В данном примере описание:
Regression model to predict angles of rotation of digits, using hyperparameters to specify: * the number of filters used by the convolution layers * the probability of the dropout layer in the network
Раздел Hyperparameters задает стратегию (Exhaustive Sweep
) и гиперзначения параметров, чтобы использовать для эксперимента. Когда вы запускаете эксперимент, Experiment Manager обучает сеть с помощью каждой комбинации гиперзначений параметров, заданных в гипертаблице параметров. Этот пример использует два гиперпараметра:
Probability
устанавливает вероятность слоя уволенного в нейронной сети. По умолчанию значения для этого гиперпараметра заданы как [0.1 0.2]
.
Filters
указывает на количество фильтров, используемых первым слоем свертки в нейронной сети. В последующих слоях свертки количество фильтров является кратным этому значению. По умолчанию значения этого гиперпараметра заданы как [4 6 8]
.
Функция Setup конфигурирует обучающие данные, сетевую архитектуру и опции обучения для эксперимента. Вход к функции настройки является структурой с полями от гипертаблицы параметров. Функция настройки возвращает четыре выходных параметра, которые вы используете, чтобы обучить сеть для проблем регрессии изображений. Функция настройки имеет три раздела.
Обучающие данные загрузки задают данные об обучении и валидации для эксперимента как 4-D массивы. Наборы данных обучения и валидации каждый содержит 5 000 изображений цифр от 0 до 9. Значения регрессии соответствуют углам вращения цифр.
[XTrain,~,YTrain] = digitTrain4DArrayData; [XValidation,~,YValidation] = digitTest4DArrayData;
Архитектура Сети Define задает архитектуру для сверточной нейронной сети для регрессии.
inputSize = [28 28 1]; numFilters = params.Filters; layers = [ imageInputLayer(inputSize) convolution2dLayer(3,numFilters,Padding="same") batchNormalizationLayer reluLayer averagePooling2dLayer(2,Stride=2) convolution2dLayer(3,2*numFilters,Padding="same") batchNormalizationLayer reluLayer averagePooling2dLayer(2,Stride=2) convolution2dLayer(3,4*numFilters,Padding="same") batchNormalizationLayer reluLayer convolution2dLayer(3,4*numFilters,Padding="same") batchNormalizationLayer reluLayer dropoutLayer(params.Probability) fullyConnectedLayer(1) regressionLayer];
Укажите, что Опции обучения задают trainingOptions
объект для эксперимента. Пример обучает сеть в течение 30 эпох. Скорость обучения первоначально 0.001 и понижается на коэффициент 0,1 после 20 эпох. Программное обеспечение обучает сеть на обучающих данных и вычисляет среднеквадратическую ошибку (RMSE) и потерю на данных о валидации равномерно во время обучения. Данные о валидации не используются, чтобы обновить сетевые веса.
miniBatchSize = 128; validationFrequency = floor(numel(YTrain)/miniBatchSize); options = trainingOptions("sgdm", ... MiniBatchSize=miniBatchSize, ... MaxEpochs=30, ... InitialLearnRate=1e-3, ... LearnRateSchedule="piecewise", ... LearnRateDropFactor=0.1, ... LearnRateDropPeriod=20, ... Shuffle="every-epoch", ... ValidationData={XValidation,YValidation}, ... ValidationFrequency=validationFrequency, ... Verbose=false);
Чтобы смотреть функцию настройки, под Функцией Setup, нажимают Edit. Функция настройки открывается в Редакторе MATLAB®. Кроме того, код для функции настройки появляется в Приложении 1 в конце этого примера.
Раздел Metrics задает дополнительные функции, которые оценивают результаты эксперимента. Experiment Manager выполняет эти функции каждый раз, когда он закончил обучать сеть. Чтобы смотреть метрическую функцию, выберите имя метрической функции и нажмите Edit. Метрическая функция открывается в редакторе MATLAB.
Этот пример включает метрическую функцию Accuracy
это определяет процент угловых предсказаний в приемлемом допуске на погрешность от истинных углов. По умолчанию функция использует порог 10 градусов. Код для метрической функции появляется в Приложении 2 в конце этого примера.
Когда вы запускаете эксперимент, Experiment Manager обучает сеть, заданную функцией настройки шесть раз. Каждое испытание использует различную комбинацию гиперзначений параметров. По умолчанию Experiment Manager запускает одно испытание за один раз. Если у вас есть Parallel Computing Toolbox™, можно запустить несколько испытаний одновременно. Для лучших результатов, прежде чем вы запустите свой эксперимент, начинают параллельный пул со стольких же рабочих сколько графические процессоры. Для получения дополнительной информации смотрите Использование Experiment Manager, чтобы Обучить нейронные сети параллельно и Поддержка графического процессора Релизом (Parallel Computing Toolbox).
Чтобы запустить один суд над экспериментом за один раз, на панели инструментов Experiment Manager, нажимают Run.
Чтобы запустить несколько испытаний одновременно, нажмите Use Parallel и затем Запуск. Если нет никакого текущего параллельного пула, Experiment Manager запускает тот с помощью кластерного профиля по умолчанию. Experiment Manager затем выполняет несколько одновременных испытаний, в зависимости от количества параллельных доступных рабочих.
Таблица результатов показывает RMSE и потерю для каждого испытания. Таблица также показывает точность испытания, как определено пользовательской метрической функцией Accuracy
.
В то время как эксперимент запускается, нажмите Training Plot, чтобы отобразить учебный график и отследить прогресс каждого испытания.
Чтобы найти лучший результат для вашего эксперимента, отсортируйте таблицу результатов точностью.
Укажите на столбец Точности.
Кликните по треугольному значку.
Выберите Sort в порядке убывания.
Испытание с самой высокой точностью появляется наверху таблицы результатов.
Чтобы проверить производительность отдельного испытания, экспортируйте обучивший сеть и отобразите диаграмму остаточных значений для каждого класса цифры.
Выберите испытание с самой высокой точностью.
На панели инструментов Experiment Manager нажмите Export.
В диалоговом окне введите имя переменной рабочей области для экспортируемой сети. Именем по умолчанию является trainedNetwork
.
Используйте экспортируемую сеть в качестве входа к функциональному plotResiduals
, который перечислен в Приложении 3 в конце этого примера. Например, в командном окне MATLAB, введите:
plotResiduals(trainedNetwork)
Функция создает остаточную диаграмму для каждой цифры. Классы цифры с самой высокой точностью имеют среднее значение близко к нулю и небольшому отклонению.
Чтобы записать наблюдения о результатах вашего эксперимента, добавьте аннотацию.
В таблице результатов щелкните правой кнопкой по ячейке Accuracy лучшего испытания.
Выберите Add Annotation.
В панели Аннотаций введите свои наблюдения в текстовое поле.
Для получения дополнительной информации смотрите сортировку, Фильтр, и Аннотируйте Результаты Эксперимента.
В панели Браузера Эксперимента щелкните правой кнопкой по имени проекта и выберите Close Project. Experiment Manager закрывает все эксперименты и результаты, содержавшиеся в проекте.
Эта функция конфигурирует обучающие данные, сетевую архитектуру и опции обучения для эксперимента.
Входной параметр
params
структура с полями от гипертаблицы параметров Experiment Manager.
Вывод
XTrain
4-D массив, содержащий обучающие данные.
YTrain
1D массив, содержащий значения регрессии для обучения,
layers
график слоев, который задает архитектуру нейронной сети.
options
trainingOptions
объект.
function [XTrain,YTrain,layers,options] = RegressionExperiment_setup1(params) [XTrain,~,YTrain] = digitTrain4DArrayData; [XValidation,~,YValidation] = digitTest4DArrayData; inputSize = [28 28 1]; numFilters = params.Filters; layers = [ imageInputLayer(inputSize) convolution2dLayer(3,numFilters,Padding="same") batchNormalizationLayer reluLayer averagePooling2dLayer(2,Stride=2) convolution2dLayer(3,2*numFilters,Padding="same") batchNormalizationLayer reluLayer averagePooling2dLayer(2,Stride=2) convolution2dLayer(3,4*numFilters,Padding="same") batchNormalizationLayer reluLayer convolution2dLayer(3,4*numFilters,Padding="same") batchNormalizationLayer reluLayer dropoutLayer(params.Probability) fullyConnectedLayer(1) regressionLayer]; miniBatchSize = 128; validationFrequency = floor(numel(YTrain)/miniBatchSize); options = trainingOptions("sgdm", ... MiniBatchSize=miniBatchSize, ... MaxEpochs=30, ... InitialLearnRate=1e-3, ... LearnRateSchedule="piecewise", ... LearnRateDropFactor=0.1, ... LearnRateDropPeriod=20, ... Shuffle="every-epoch", ... ValidationData={XValidation,YValidation}, ... ValidationFrequency=validationFrequency, ... Verbose=false); end
Эта функция вычисляет количество предсказаний в приемлемом допуске на погрешность от истинных углов.
function metricOutput = Accuracy(trialInfo) [XValidation,~,YValidation] = digitTest4DArrayData; YPredicted = predict(trialInfo.trainedNetwork,XValidation); predictionError = YValidation - YPredicted; thr = 10; numCorrect = sum(abs(predictionError) < thr); numValidationImages = numel(YValidation); metricOutput = 100*numCorrect/numValidationImages; end
Эта функция создает остаточную диаграмму для каждой цифры.
function plotResiduals(net) [XValidation,~,YValidation] = digitTest4DArrayData; YPredicted = predict(net,XValidation); predictionError = YValidation - YPredicted; residualMatrix = reshape(predictionError,500,10); figure boxplot(residualMatrix,... 'Labels',{'0','1','2','3','4','5','6','7','8','9'}) xlabel('Digit Class') ylabel('Degrees Error') title('Residuals') end