Слой

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

Описание

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

Создание

Для списка слоев глубокого обучения в 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'
        AverageImage: []

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

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'. Слой '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]

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

YPredicted = classify(net,XValidation);
accuracy = mean(YPredicted == YValidation)
accuracy = 0.9968

Введенный в R2016a

Для просмотра документации необходимо авторизоваться на сайте