SeriesNetwork

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

Описание

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

Создание

Существует несколько способов создать 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 слоев с learnable весами: 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