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'. '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