SeriesNetwork

Сеть серии для глубокого обучения

Описание

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

Создание

Существует несколько способов создать SeriesNetwork объект:

Примечание

Чтобы узнать о других предварительно обученных сетях, таких как googlenet и resnet50, см. «Предварительно обученные глубокие нейронные сети».

Свойства

расширить все

Слои сети, заданные как Layer массив.

Имена сетевого входного слоя, заданные как массив ячеек из векторов символов.

Типы данных: cell

Имена выходного слоя сети, заданные как массив ячеек из векторов символов.

Типы данных: cell

Функции объекта

activationsВычислите нейронную сеть для глубокого обучения слоя активации
classifyКлассификация данных с помощью обученной глубокой нейронной сети
predictПрогнозируйте ответы с помощью обученной глубокой нейронной сети
predictAndUpdateStateПрогнозируйте ответы с помощью обученной рекуррентной нейронной сети и обновляйте состояние сети
classifyAndUpdateStateКлассифицируйте данные с помощью обученной рекуррентной нейронной сети и обновляйте состояние сети
resetStateСброс состояния рекуррентной нейронной сети
plotПостройте график слоя нейронной сети

Примеры

свернуть все

Загрузите предварительно обученную сверточную нейронную сеть AlexNet и исследуйте слои и классы.

Загрузите предварительно обученную сеть AlexNet с помощью alexnet. Область выхода net является SeriesNetwork объект.

net = alexnet
net = 
  SeriesNetwork with properties:

    Layers: [25×1 nnet.cnn.layer.Layer]

Использование Layers свойство, просмотрите сетевую архитектуру. Сеть состоит из 25 слоев. Существует 8 слоев с усвояемыми весами: 5 сверточных слоев и 3 полносвязные слои.

net.Layers
ans = 
  25x1 Layer array with layers:

     1   'data'     Image Input                   227x227x3 images with 'zerocenter' normalization
     2   'conv1'    Convolution                   96 11x11x3 convolutions with stride [4  4] and padding [0  0  0  0]
     3   'relu1'    ReLU                          ReLU
     4   'norm1'    Cross Channel Normalization   cross channel normalization with 5 channels per element
     5   'pool1'    Max Pooling                   3x3 max pooling with stride [2  2] and padding [0  0  0  0]
     6   'conv2'    Grouped Convolution           2 groups of 128 5x5x48 convolutions with stride [1  1] and padding [2  2  2  2]
     7   'relu2'    ReLU                          ReLU
     8   'norm2'    Cross Channel Normalization   cross channel normalization with 5 channels per element
     9   'pool2'    Max Pooling                   3x3 max pooling with stride [2  2] and padding [0  0  0  0]
    10   'conv3'    Convolution                   384 3x3x256 convolutions with stride [1  1] and padding [1  1  1  1]
    11   'relu3'    ReLU                          ReLU
    12   'conv4'    Grouped Convolution           2 groups of 192 3x3x192 convolutions with stride [1  1] and padding [1  1  1  1]
    13   'relu4'    ReLU                          ReLU
    14   'conv5'    Grouped Convolution           2 groups of 128 3x3x192 convolutions with stride [1  1] and padding [1  1  1  1]
    15   'relu5'    ReLU                          ReLU
    16   'pool5'    Max Pooling                   3x3 max pooling with stride [2  2] and padding [0  0  0  0]
    17   'fc6'      Fully Connected               4096 fully connected layer
    18   'relu6'    ReLU                          ReLU
    19   'drop6'    Dropout                       50% dropout
    20   'fc7'      Fully Connected               4096 fully connected layer
    21   'relu7'    ReLU                          ReLU
    22   'drop7'    Dropout                       50% dropout
    23   'fc8'      Fully Connected               1000 fully connected layer
    24   'prob'     Softmax                       softmax
    25   'output'   Classification Output         crossentropyex with 'tench' and 999 other classes

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

net.Layers(end).Classes(1:10)
ans = 10×1 categorical array
     tench 
     goldfish 
     great white shark 
     tiger shark 
     hammerhead 
     electric ray 
     stingray 
     cock 
     hen 
     ostrich 

Укажите файл примера 'digitsnet.prototxt' для импорта.

protofile = 'digitsnet.prototxt';

Импортируйте слои сети.

layers = importCaffeLayers(protofile)
layers = 

  1x7 Layer array with layers:

     1   'testdata'   Image Input             28x28x1 images
     2   'conv1'      Convolution             20 5x5x1 convolutions with stride [1  1] and padding [0  0]
     3   'relu1'      ReLU                    ReLU
     4   'pool1'      Max Pooling             2x2 max pooling with stride [2  2] and padding [0  0]
     5   'ip1'        Fully Connected         10 fully connected layer
     6   'loss'       Softmax                 softmax
     7   'output'     Classification Output   crossentropyex with 'class1', 'class2', and 8 other classes

Загрузите данные как ImageDatastore объект.

digitDatasetPath = fullfile(matlabroot,'toolbox','nnet', ...
    'nndemos','nndatasets','DigitDataset');
imds = imageDatastore(digitDatasetPath, ...
    'IncludeSubfolders',true, ...
    'LabelSource','foldernames');

datastore содержит 10 000 синтетических изображений цифр от 0 до 9. Изображения генерируются путем применения случайных преобразований к цифровым изображениям, созданным различными шрифтами. Каждое цифровое изображение составляет 28 на 28 пикселей. datastore содержит равное количество изображений в категории.

Отобразите некоторые изображения в datastore.

figure
numImages = 10000;
perm = randperm(numImages,20);
for i = 1:20
    subplot(4,5,i);
    imshow(imds.Files{perm(i)});
    drawnow;
end

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

numTrainingFiles = 750;
[imdsTrain,imdsTest] = splitEachLabel(imds,numTrainingFiles,'randomize');

splitEachLabel разделяет файлы изображений на digitData в два новых хранилища данных, imdsTrain и imdsTest.

Определите архитектуру сверточной нейронной сети.

layers = [ ...
    imageInputLayer([28 28 1])
    convolution2dLayer(5,20)
    reluLayer
    maxPooling2dLayer(2,'Stride',2)
    fullyConnectedLayer(10)
    softmaxLayer
    classificationLayer];

Установите опции по умолчанию для стохастического градиентного спуска с импульсом. Установите максимальное количество эпох в 20 и запустите обучение с начальной скоростью обучения 0,0001.

options = trainingOptions('sgdm', ...
    'MaxEpochs',20,...
    'InitialLearnRate',1e-4, ...
    'Verbose',false, ...
    'Plots','training-progress');

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

net = trainNetwork(imdsTrain,layers,options);

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

YPred = classify(net,imdsTest);
YTest = imdsTest.Labels;

Вычислите точность. Точность является отношением количества истинных меток в тестовых данных, соответствующих классификациям из classify количеству изображений в тестовых данных.

accuracy = sum(YPred == YTest)/numel(YTest)
accuracy = 0.9420

Расширенные возможности

..
Введенный в R2016a