Layer

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

Описание

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

Создание

Список слоев глубокого обучения в MATLAB®, см. «Список слоев глубокого обучения». Чтобы задать архитектуру нейронной сети со всеми слоями, соединенными последовательно, создайте массив слоев непосредственно. Чтобы задать архитектуру сети, где слои могут иметь несколько входов или выходов, используйте LayerGraph объект.

Также можно импортировать слои из Caffe, Keras и ONNX с помощью importCaffeLayers, importKerasLayers, и importONNXLayers соответственно.

Чтобы узнать, как создать свои собственные пользовательские слои, смотрите Задать Пользовательские Слои Глубокого Обучения.

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

trainNetworkОбучите глубокую нейронную сеть

Примеры

свернуть все

Задайте архитектуру сверточной нейронной сети для классификации с одним сверточным слоем, слоем ReLU и полносвязным слоем.

layers = [ ...
    imageInputLayer([28 28 3])
    convolution2dLayer([5 5],10)
    reluLayer
    fullyConnectedLayer(10)
    softmaxLayer
    classificationLayer]
layers = 
  6x1 Layer array with layers:

     1   ''   Image Input             28x28x3 images with 'zerocenter' normalization
     2   ''   Convolution             10 5x5 convolutions with stride [1  1] and padding [0  0  0  0]
     3   ''   ReLU                    ReLU
     4   ''   Fully Connected         10 fully connected layer
     5   ''   Softmax                 softmax
     6   ''   Classification Output   crossentropyex

layers является Layer объект.

Кроме того, можно создать слои по отдельности и затем объединить их.

input = imageInputLayer([28 28 3]);
conv = convolution2dLayer([5 5],10);
relu = reluLayer;
fc = fullyConnectedLayer(10);
sm = softmaxLayer;
co = classificationLayer;

layers = [ ...
    input
    conv
    relu
    fc
    sm
    co]
layers = 
  6x1 Layer array with layers:

     1   ''   Image Input             28x28x3 images with 'zerocenter' normalization
     2   ''   Convolution             10 5x5 convolutions with stride [1  1] and padding [0  0  0  0]
     3   ''   ReLU                    ReLU
     4   ''   Fully Connected         10 fully connected layer
     5   ''   Softmax                 softmax
     6   ''   Classification Output   crossentropyex

Задайте архитектуру сверточной нейронной сети для классификации с одним сверточным слоем, слоем ReLU и полносвязным слоем.

layers = [ ...
    imageInputLayer([28 28 3])
    convolution2dLayer([5 5],10)
    reluLayer
    fullyConnectedLayer(10)
    softmaxLayer
    classificationLayer];

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

layers(1)
ans = 
  ImageInputLayer with properties:

                      Name: ''
                 InputSize: [28 28 3]

   Hyperparameters
          DataAugmentation: 'none'
             Normalization: 'zerocenter'
    NormalizationDimension: 'auto'
                      Mean: []

Просмотрите вход размер слоя входа изображений.

layers(1).InputSize
ans = 1×3

    28    28     3

Отображение шага для сверточного слоя.

layers(2).Stride
ans = 1×2

     1     1

Получите доступ к коэффициенту скорости обучения смещения для полностью подключенного уровня.

layers(4).BiasLearnRateFactor
ans = 1

Создайте сеть простого ориентированного ациклического графика (DAG) для глубокого обучения. Обучите сеть классифицировать изображения цифр. Простая сеть в этом примере состоит из:

  • Основная ветвь со слоями, соединенными последовательно.

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

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

layers = [
    imageInputLayer([28 28 1],'Name','input')
    
    convolution2dLayer(5,16,'Padding','same','Name','conv_1')
    batchNormalizationLayer('Name','BN_1')
    reluLayer('Name','relu_1')
    
    convolution2dLayer(3,32,'Padding','same','Stride',2,'Name','conv_2')
    batchNormalizationLayer('Name','BN_2')
    reluLayer('Name','relu_2')
    convolution2dLayer(3,32,'Padding','same','Name','conv_3')
    batchNormalizationLayer('Name','BN_3')
    reluLayer('Name','relu_3')
    
    additionLayer(2,'Name','add')
    
    averagePooling2dLayer(2,'Stride',2,'Name','avpool')
    fullyConnectedLayer(10,'Name','fc')
    softmaxLayer('Name','softmax')
    classificationLayer('Name','classOutput')];

Создайте график слоев из массива слоев. layerGraph соединяет все слои в layers последовательно. Постройте график графика слоев.

lgraph = layerGraph(layers);
figure
plot(lgraph)

Создайте сверточный слой 1 на 1 и добавьте его к графику слоев. Задайте количество сверточных фильтров и шага так, чтобы размер активации совпадал с размером активации 'relu_3' слой. Эта схема позволяет слою сложения добавить выходы 'skipConv' и 'relu_3' слои. Чтобы проверить, что слой находится в графе, постройте график слоев.

skipConv = convolution2dLayer(1,32,'Stride',2,'Name','skipConv');
lgraph = addLayers(lgraph,skipConv);
figure
plot(lgraph)

Создайте ярлык соединения из 'relu_1' слой к 'add' слой. Поскольку вы задали два в качестве количества входов для слоя сложения при его создании, слой имеет два входов с именем 'in1' и 'in2'. The 'relu_3' слой уже подключен к 'in1' вход. Соедините 'relu_1' слой к 'skipConv' слой и 'skipConv' слой к 'in2' вход 'add' слой. Слой сложения теперь суммирует выходы 'relu_3' и 'skipConv' слои. Чтобы проверить правильность соединения слоев, постройте график слоев.

lgraph = connectLayers(lgraph,'relu_1','skipConv');
lgraph = connectLayers(lgraph,'skipConv','add/in2');
figure
plot(lgraph);

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

[XTrain,YTrain] = digitTrain4DArrayData;
[XValidation,YValidation] = digitTest4DArrayData;

Задайте опции обучения и обучите сеть. trainNetwork проверяет сеть с помощью данных валидации каждый ValidationFrequency итераций.

options = trainingOptions('sgdm', ...
    'MaxEpochs',8, ...
    'Shuffle','every-epoch', ...
    'ValidationData',{XValidation,YValidation}, ...
    'ValidationFrequency',30, ...
    'Verbose',false, ...
    'Plots','training-progress');
net = trainNetwork(XTrain,YTrain,lgraph,options);

Отображение свойств обученной сети. Сеть является DAGNetwork объект.

net
net = 
  DAGNetwork with properties:

         Layers: [16×1 nnet.cnn.layer.Layer]
    Connections: [16×2 table]
     InputNames: {'input'}
    OutputNames: {'classOutput'}

Классифицируйте изображения валидации и вычислите точность. Сеть очень точная.

YPredicted = classify(net,XValidation);
accuracy = mean(YPredicted == YValidation)
accuracy = 0.9930
Введенный в R2016a