Создайте эксперимент глубокого обучения для классификации

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

Этот эксперимент требует Модели Deep Learning Toolbox™ для пакета Сетевой поддержки GoogLeNet. Прежде чем вы запустите эксперимент, установите этот пакет поддержки путем вызова googlenet функционируйте и нажатие на ссылку на загрузку.

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

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

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

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

Merchandise image classification using:
* an untrained network (default) or a pretrained network (googlenet)
* various solvers for training networks (sgdm, rmsprop, or adam)

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

  • Network задает сеть, чтобы обучаться. Опции включают "default" (сеть по умолчанию, обеспеченная экспериментом, обрабатывает по шаблону для классификации изображений), и "googlenet" (предварительно обученная сеть GoogLeNet с модифицированными слоями для передачи обучения).

  • Solver указывает, что алгоритм раньше обучал сеть. Опции включают "sgdm" (стохастический градиентный спуск с импульсом), "rmsprop" (среднеквадратичное распространение), и "adam" (адаптивная оценка момента). Для получения дополнительной информации об этих алгоритмах, смотрите Стохастический Градиентный спуск.

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

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

filename = "MerchData.zip";
dataFolder = fullfile(tempdir,"MerchData");
if ~exist(dataFolder,"dir")
    unzip(filename,tempdir);
end
imdsTrain = imageDatastore(dataFolder, ...
    IncludeSubfolders=true, ....
    LabelSource="foldernames");
numTrainingFiles = 0.7;
[imdsTrain,imdsValidation] = splitEachLabel(imdsTrain,numTrainingFiles);
  • Архитектура Сети Define задает архитектуру для сверточной нейронной сети для классификации глубокого обучения. В этом примере выбор сети обучаться зависит от значения гиперпараметра Network.

switch params.Network
    case "default"
        inputSize = [227 227 3];
        numClasses = 5;
        layers = [
            imageInputLayer(inputSize)
            convolution2dLayer(5,20)
            batchNormalizationLayer
            reluLayer
            fullyConnectedLayer(numClasses)
            softmaxLayer
            classificationLayer];
    case "googlenet"
        inputSize = [224 224 3];
        numClasses = 5;
        imdsTrain = augmentedImageDatastore(inputSize(1:2),imdsTrain);
        imdsValidation = augmentedImageDatastore(inputSize(1:2), ...
            imdsValidation);
        net = googlenet;
        layers = layerGraph(net);
        newLearnableLayer = fullyConnectedLayer(numClasses, ...
            Name="new_fc", ...
            WeightLearnRateFactor=10, ...
            BiasLearnRateFactor=10);
        layers = replaceLayer(layers,"loss3-classifier",newLearnableLayer);
        newClassLayer = classificationLayer(Name="new_classoutput");
        layers = replaceLayer(layers,"output",newClassLayer);
    otherwise
        error("Undefined network selection.");
end
  • Укажите, что Опции обучения задают trainingOptions объект для эксперимента. Пример обучает сеть в течение 8 эпох с помощью алгоритма, заданного Solver запись в гипертаблице параметров.

options = trainingOptions(params.Solver, ...
    MiniBatchSize=10, ...
    MaxEpochs=8, ...
    InitialLearnRate=1e-4, ...
    Shuffle="every-epoch", ...
    ValidationData=imdsValidation, ...
    ValidationFrequency=5, ...
    Verbose=false);

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

Раздел Metrics задает дополнительные функции, которые оценивают результаты эксперимента. Этот пример не включает пользовательских метрических функций.

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

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

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

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

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

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

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

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

  1. Укажите на столбец Точности Валидации.

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

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

Испытание с самой высокой точностью валидации появляется наверху таблицы результатов.

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

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

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

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

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

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

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

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

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

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

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

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

Вывод

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

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

  • options trainingOptions объект.

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

filename = "MerchData.zip";
dataFolder = fullfile(tempdir,"MerchData");
if ~exist(dataFolder,"dir")
    unzip(filename,tempdir);
end

imdsTrain = imageDatastore(dataFolder, ...
    IncludeSubfolders=true, ....
    LabelSource="foldernames");

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

switch params.Network
    case "default"
        inputSize = [227 227 3];
        numClasses = 5;
        
        layers = [
            imageInputLayer(inputSize)
            convolution2dLayer(5,20)
            batchNormalizationLayer
            reluLayer
            fullyConnectedLayer(numClasses)
            softmaxLayer
            classificationLayer];
        
    case "googlenet"
        inputSize = [224 224 3];
        numClasses = 5;
        
        imdsTrain = augmentedImageDatastore(inputSize(1:2),imdsTrain);
        imdsValidation = augmentedImageDatastore(inputSize(1:2), ...
            imdsValidation);
        
        net = googlenet;
        layers = layerGraph(net);
        
        newLearnableLayer = fullyConnectedLayer(numClasses, ...
            Name="new_fc", ...
            WeightLearnRateFactor=10, ...
            BiasLearnRateFactor=10);
        layers = replaceLayer(layers,"loss3-classifier",newLearnableLayer);
        
        newClassLayer = classificationLayer(Name="new_classoutput");
        layers = replaceLayer(layers,"output",newClassLayer);
       
    otherwise
        error("Undefined network selection.");
end

options = trainingOptions(params.Solver, ...
    MiniBatchSize=10, ...
    MaxEpochs=8, ...
    InitialLearnRate=1e-4, ...
    Shuffle="every-epoch", ...
    ValidationData=imdsValidation, ...
    ValidationFrequency=5, ...
    Verbose=false);

end

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

Приложения

Функции

Похожие темы