В этом примере показано, как создать и обучить простую сверточную нейронную сеть классификации глубокого обучения. Сверточные нейронные сети являются особыми инструментами для глубокого обучения и особенно подходят для распознавания изображений.
Пример демонстрирует как:
Загрузите данные изображения.
Определить сетевую архитектуру.
Задайте опции обучения.
Обучите сеть.
Предскажите метки новых данных и вычислите точность классификации.
Для примера, показывающего, как в интерактивном режиме создать и обучить простую сеть классификации изображений, смотрите, Создают Простую Сеть Классификации Изображений Используя 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');
Задайте архитектуру сверточной нейронной сети. Задайте размер изображений во входном слое сети и количестве классов в полносвязном слое перед слоем классификации. Каждое изображение 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
Для следующих шагов в глубоком обучении можно попытаться использовать предварительно обученную сеть для других задач. Решите новые задачи классификации на своих данных изображения с передачей обучения или извлечением признаков. Для примеров смотрите, Запускают Глубокое обучение Быстрее Используя Передачу обучения и Обучают Классификаторы, использующие Функции, Извлеченные из Предварительно обученных сетей. Чтобы узнать больше о предварительно обученных сетях, смотрите Предварительно обученные Глубокие нейронные сети.
trainNetwork
| trainingOptions