exponenta event banner

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');

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

Отображение некоторых изображений в хранилище данных.

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

Разделите хранилище данных таким образом, чтобы в каждой категории обучающего набора было 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