Оцените эксперименты глубокого обучения при помощи метрических функций

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

  • Проверьте производительность предсказания обучившего сеть.

  • Оцените процесс обучения путем вычисления наклона потери валидации за итоговую эпоху.

  • Отобразите размер сети, используемой в эксперименте, который использует различные сетевые архитектуры для каждого испытания.

Когда каждое испытание закончило обучение, Experiment Manager выполняет метрические функции и отображает их значения в таблице результатов.

В этом примере вы обучаете сеть, чтобы классифицировать изображения рукописных цифр. Две метрических функции определяют, как хорошо обучивший сеть идентифицирует изображения цифр "один" и семь. Для получения дополнительной информации об использовании Experiment Manager, чтобы обучить сеть для классификации изображений, смотрите Классификацию Изображений путем Развертки Гиперпараметров.

Задайте метрические функции

Добавьте метрическую функцию во встроенный учебный эксперимент.

1. В панели Эксперимента, под Метриками, нажимают Add.

2. В Добавить метрическом диалоговом окне введите имя для метрической функции и нажмите ОК. Если вы вводите имя функции, которая уже существует в проекте, Experiment Manager добавляет его в эксперимент. В противном случае Experiment Manager создает функцию, определяемую шаблоном по умолчанию.

3. Выберите имя метрической функции и нажмите Edit. Метрическая функция открывается в Редакторе MATLAB®.

Вход к метрической функции является структурой с тремя полями:

  • trainedNetwork SeriesNetwork объект или DAGNetwork объект возвращен trainNetwork функция. Для получения дополнительной информации смотрите сетевой.

  • trainingInfo структура, содержащая учебную информацию, возвращенную trainNetwork функция. Для получения дополнительной информации смотрите информацию.

  • parameters структура с полями от гипертаблицы параметров.

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

Открытый эксперимент

Во-первых, откройте пример. Experiment Manager загружает проект с предварительно сконфигурированным экспериментом, который можно смотреть и запустить. Чтобы открыть эксперимент, в панели Браузера Эксперимента, дважды кликают имя эксперимента (ClassificationExperiment).

Встроенные учебные эксперименты состоят из описания, таблицы гиперпараметров, функции настройки и набора метрических функций, чтобы оценить результаты эксперимента. Для получения дополнительной информации смотрите, Конфигурируют Встроенный Учебный Эксперимент.

Поле Description содержит текстовое описание эксперимента. В данном примере описание:

Classification of digits, evaluating results by using metric functions:
* OnesAsSevens returns the percentage of 1s misclassified as 7s.
* SevensAsOnes returns the percentage of 7s misclassified as 1s.

Раздел Hyperparameters задает стратегию (Exhaustive Sweep) и гиперзначения параметров, чтобы использовать для эксперимента. Когда вы запускаете эксперимент, Experiment Manager обучает сеть с помощью каждой комбинации гиперзначений параметров, заданных в гипертаблице параметров. Этот пример использует гиперпараметры InitialLearnRate и Momentum.

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

  • Обучающие данные загрузки задают хранилища данных изображений, содержащие данные об обучении и валидации. Этот пример загружает изображения от набора данных Цифр. Для получения дополнительной информации об этом наборе данных смотрите Наборы Данных изображения.

digitDatasetPath = fullfile(toolboxdir("nnet"), ...
    "nndemos","nndatasets","DigitDataset");
imdsTrain = imageDatastore(digitDatasetPath, ...
    IncludeSubfolders=true, ...
    LabelSource="foldernames");
numTrainingFiles = 750;
[imdsTrain,imdsValidation] = splitEachLabel(imdsTrain,numTrainingFiles);
  • Архитектура Сети Define задает архитектуру для сверточной нейронной сети для классификации глубокого обучения. Этот пример использует сеть классификации по умолчанию, обеспеченную шаблоном функции настройки.

inputSize = [28 28 1];
numClasses = 10;
layers = [
    imageInputLayer(inputSize)
    convolution2dLayer(5,20)
    batchNormalizationLayer
    reluLayer
    fullyConnectedLayer(numClasses)
    softmaxLayer
    classificationLayer];
  • Укажите, что Опции обучения задают trainingOptions объект для эксперимента. Пример загружает значения для опций обучения 'InitialLearnRate' и 'Momentum' от гипертаблицы параметров.

options = trainingOptions("sgdm", ...
    MaxEpochs=5, ...
    ValidationData=imdsValidation, ...
    ValidationFrequency=30, ...
    InitialLearnRate=params.InitialLearnRate, ...
    Momentum=params.Momentum, ...
    Verbose=false);

Чтобы смотреть функцию настройки, под Функцией Setup, нажимают Edit. Функция настройки открывается в Редакторе MATLAB®. Кроме того, код для функции настройки появляется в Приложении 1 в конце этого примера.

Раздел Metrics задает дополнительные функции, которые оценивают результаты эксперимента. Experiment Manager выполняет эти функции каждый раз, когда он закончил обучать сеть. Чтобы смотреть метрическую функцию, выберите имя метрической функции и нажмите Edit. Метрическая функция открывается в редакторе MATLAB.

Этот пример включает две метрических функции.

  • OnesAsSevens возвращает процент изображений цифры "один", которую обучивший сеть неправильно классифицирует как семерки.

  • SevensAsOnes возвращает процент изображений цифры семь, который обучивший сеть неправильно классифицирует как единицы.

Каждая из этих функций использует обучивший сеть, чтобы классифицировать целый набор данных Цифр. Затем функции определяют количество изображений, для которых не соглашаются фактическая метка и предсказанная метка. Например, функциональный OnesAsSevens вычисляет количество изображений с фактической меткой '1' и предсказанная метка '7'. Точно так же функциональный SevensAsOnes вычисляет количество изображений с фактической меткой '7' и предсказанная метка '1'. Код для этих метрических функций появляется в Приложении 2 и Приложении 3 в конце этого примера.

Запустите эксперимент

Когда вы запускаете эксперимент, Experiment Manager обучает сеть, заданную функцией настройки шесть раз. Каждое испытание использует различную комбинацию гиперзначений параметров. По умолчанию Experiment Manager запускает одно испытание за один раз. Если у вас есть Parallel Computing Toolbox™, можно запустить несколько испытаний одновременно. Для лучших результатов, прежде чем вы запустите свой эксперимент, начинают параллельный пул со стольких же рабочих сколько графические процессоры. Для получения дополнительной информации смотрите Использование Experiment Manager, чтобы Обучить нейронные сети параллельно и Поддержка графического процессора Релизом (Parallel Computing Toolbox).

  • Чтобы запустить один суд над экспериментом за один раз, на панели инструментов Experiment Manager, нажимают Run.

  • Чтобы запустить несколько испытаний одновременно, нажмите Use Parallel и затем Запуск. Если нет никакого текущего параллельного пула, Experiment Manager запускает тот с помощью кластерного профиля по умолчанию. Experiment Manager затем выполняет несколько одновременных испытаний, в зависимости от количества параллельных доступных рабочих.

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

Оцените результаты

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

  1. Укажите на столбец OnesAsSevens.

  2. Кликните по треугольному значку.

  3. Выберите Sort в порядке возрастания.

Точно так же найдите испытание с самым маленьким количеством неправильно классифицированных семерок путем открытия выпадающего меню для столбца SevensAsOnes и выбора Sort в порядке возрастания.

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

Чтобы записать наблюдения о результатах вашего эксперимента, добавьте аннотацию.

  1. В таблице результатов щелкните правой кнопкой по ячейке OnesAsSevens лучшего испытания.

  2. Выберите Add Annotation.

  3. В панели Аннотаций введите свои наблюдения в текстовое поле.

  4. Повторите предыдущие шаги для ячейки SevensAsOnes.

Для получения дополнительной информации смотрите сортировку, Фильтр, и Аннотируйте Результаты Эксперимента.

Закройте эксперимент

В панели Браузера Эксперимента щелкните правой кнопкой по имени проекта и выберите Close Project. Experiment Manager закрывает все эксперименты и результаты, содержавшиеся в проекте.

Приложение 1: функция Setup

Эта функция конфигурирует обучающие данные, сетевую архитектуру и опции обучения для эксперимента.

Входной параметр

  • params структура с полями от гипертаблицы параметров Experiment Manager.

Вывод

  • imdsTrain datastore изображений для обучающих данных.

  • layers график слоев, который задает архитектуру нейронной сети.

  • options trainingOptions объект.

function [imdsTrain,layers,options] = ClassificationExperiment_setup1(params)

digitDatasetPath = fullfile(toolboxdir("nnet"), ...
    "nndemos","nndatasets","DigitDataset");
imdsTrain = imageDatastore(digitDatasetPath, ...
    IncludeSubfolders=true, ...
    LabelSource="foldernames");

numTrainingFiles = 750;
[imdsTrain,imdsValidation] = splitEachLabel(imdsTrain,numTrainingFiles);

inputSize = [28 28 1];
numClasses = 10;
layers = [
    imageInputLayer(inputSize)
    convolution2dLayer(5,20)
    batchNormalizationLayer
    reluLayer
    fullyConnectedLayer(numClasses)
    softmaxLayer
    classificationLayer];

options = trainingOptions("sgdm", ...
    MaxEpochs=5, ... 
    ValidationData=imdsValidation, ...
    ValidationFrequency=30, ...
    InitialLearnRate=params.InitialLearnRate, ...
    Momentum=params.Momentum, ...
    Verbose=false);

end

Приложение 2: найдите единицы неправильно классифицированными как семерки

Эта функция определяет количество единиц, которые неправильно классифицируются как семерки.

function metricOutput = OnesAsSevens(trialInfo)

actualValue = '1';
predValue = '7';

net = trialInfo.trainedNetwork;

digitDatasetPath = fullfile(toolboxdir("nnet"), ...
    "nndemos","nndatasets","DigitDataset");
imds = imageDatastore(digitDatasetPath, ...
    IncludeSubfolders=true, ...
    LabelSource="foldernames");

YActual = imds.Labels;
YPred = classify(net,imds);

K = sum(YActual == actualValue & YPred == predValue);
N = sum(YActual == actualValue);

metricOutput = 100*K/N;

end

Приложение 3: найдите семерки неправильно классифицированными как единицы

Эта функция определяет количество семерок, которые неправильно классифицируются как единицы.

function metricOutput = SevensAsOnes(trialInfo)

actualValue = '7';
predValue = '1';

net = trialInfo.trainedNetwork;

digitDatasetPath = fullfile(toolboxdir("nnet"), ...
    "nndemos","nndatasets","DigitDataset");
imds = imageDatastore(digitDatasetPath, ...
    IncludeSubfolders=true, ...
    LabelSource="foldernames");

YActual = imds.Labels;
YPred = classify(net,imds);

K = sum(YActual == actualValue & YPred == predValue);
N = sum(YActual == actualValue);

metricOutput = 100*K/N;

end

Смотрите также

Приложения

Функции

Похожие темы