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