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

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

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

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

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

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

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

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

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

Загрузите выборочные данные цифры как 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™, и CUDA® включил графический процессор с, вычисляют возможность 3.0 или выше). В противном случае это использует центральный процессор. Можно также задать среду выполнения при помощи аргумента пары "имя-значение" '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.9884

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

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

|

Похожие темы