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