Создайте простую сеть классификации изображений

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

Пример демонстрирует, как:

  • Загрузите данные изображения.

  • Определите сетевую архитектуру.

  • Задайте опции обучения.

  • Обучите сеть.

  • Спрогнозируйте метки новых данных и вычислите точность классификации.

Пример, показывающий интерактивное создание и обучение простой сети классификации изображений, см. в разделе Создание простой сети классификации изображений с использованием Deep Network Designer.

Загрузка данных

Загрузите цифру выборочных данных как изображение datastore. The imageDatastore функция автоматически помечает изображения на основе имен папок.

digitDatasetPath = fullfile(matlabroot,'toolbox','nnet','nndemos', ...
    'nndatasets','DigitDataset');

imds = imageDatastore(digitDatasetPath, ...
    'IncludeSubfolders',true, ...
    'LabelSource','foldernames');

Разделите данные на наборы данных для обучения и валидации, так чтобы каждая категория в наборе обучающих данных содержала 750 изображений, а набор для валидации содержал оставшиеся изображения из каждой метки. splitEachLabel разделяет image datastore на два новых хранилища данных для обучения и валидации.

numTrainFiles = 750;
[imdsTrain,imdsValidation] = splitEachLabel(imds,numTrainFiles,'randomize');

Определение сетевой архитектуры

Определите архитектуру сверточной нейронной сети. Задайте размер изображений в вход слое сети и количество классов в полносвязный слой перед слоем классификации. Каждое изображение составляет 28 на 28 на 1 пиксель и есть 10 классов.

inputSize = [28 28 1];
numClasses = 10;

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

Для получения дополнительной информации о слоях глубокого обучения смотрите Список слоев глубокого обучения.

Обучите сеть

Укажите опции обучения и обучите сеть.

По умолчанию trainNetwork использует графический процессор, если он доступен, в противном случае используется центральный процессор. Для обучения на графическом процессоре требуется Parallel Computing Toolbox™ и поддерживаемое устройство GPU. Для получения информации о поддерживаемых устройствах смотрите Поддержку GPU by Release (Parallel Computing Toolbox). Можно также задать окружение выполнения с помощью 'ExecutionEnvironment' Аргумент пары "имя-значение" из trainingOptions.

options = trainingOptions('sgdm', ...
    'MaxEpochs',4, ...
    'ValidationData',imdsValidation, ...
    'ValidationFrequency',30, ...
    'Verbose',false, ...
    'Plots','training-progress');

net = trainNetwork(imdsTrain,layers,options);

Для получения дополнительной информации об опциях обучения см. Раздел «Настройка параметров» и «Train сверточной нейронной сети».

Тестирование сети

Классифицируйте данные валидации и вычислите точность классификации.

YPred = classify(net,imdsValidation);
YValidation = imdsValidation.Labels;
accuracy = mean(YPred == YValidation)
accuracy = 0.9892

Для следующих шагов в глубоком обучении можно попробовать использовать предварительно обученную сеть для других задач. Решите новые классификационные задачи на данных изображения с помощью передачи обучения или редукции данных. Для примеров смотрите Начать Глубокое Обучение Быстрее С Помощью Передачи обучения и Обучить Классификаторы С Использованием Функций, Извлеченных из Предварительно Обученных Сетей. Дополнительные сведения о предварительно обученных сетях см. в разделе «Предварительно обученные глубокие нейронные сети».

См. также

|

Похожие темы