exponenta event banner

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

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

В примере показано, как:

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

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

  • Укажите параметры обучения.

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

  • Спрогнозировать метки новых данных и рассчитать точность классификации.

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

Загрузить данные

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

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

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

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

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 использует графический процессор, если он доступен, в противном случае использует центральный процессор. Для обучения графическому процессору требуются параллельные вычислительные 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

На следующих этапах глубокого обучения можно попробовать использовать предварительно обученную сеть для других задач. Решите новые проблемы классификации данных изображения с помощью обучения переносу или извлечения функций. Примеры см. в разделах Ускоренное начало глубокого обучения с использованием обучающих программ и подготовка классификаторов с использованием функций, извлеченных из предварительно подготовленных сетей. Дополнительные сведения о предварительно обученных сетях см. в разделе Предварительно обученные глубокие нейронные сети.

См. также

|

Связанные темы