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

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

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

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

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

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

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

  • Предскажите метки новых данных и вычислите точность классификации.

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

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

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

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

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

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

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

Архитектура сети Define

Задайте архитектуру сверточной нейронной сети. Задайте размер изображений во входном слое сети и количестве классов в полносвязном слое перед слоем классификации. Каждое изображение 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™ и поддерживаемого устройства графического процессора. Для получения информации о поддерживаемых устройствах смотрите Поддержку графического процессора Релизом (Parallel Computing Toolbox). Можно также задать среду выполнения при помощи 'ExecutionEnvironment' аргумент пары "имя-значение" trainingOptions.

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

net = trainNetwork(imdsTrain,layers,options);

Для получения дополнительной информации об опциях обучения, смотрите Настроенные Параметры и Обучите Сверточную нейронную сеть.

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

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

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

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

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

|

Похожие темы