additionLayer

Описание

Слой сложения добавляет входные параметры от нескольких поэлементных слоев нейронной сети.

Задайте количество входных параметров к слою, когда вы создадите его. Входные параметры к слою имеют имена 'in1','in2',...,'inN', где N является количеством входных параметров. Используйте входные имена при соединении или разъединении слоя при помощи connectLayers или disconnectLayers. Все входные параметры к слою сложения должны иметь ту же размерность.

Создание

Синтаксис

layer = additionLayer(numInputs)
layer = additionLayer(numInputs,'Name',Name)

Описание

пример

layer = additionLayer(numInputs) создает слой сложения, который добавляет поэлементные входные параметры numInputs. Эта функция также устанавливает свойство NumInputs.

пример

layer = additionLayer(numInputs,'Name',Name) также устанавливает свойство Name. Чтобы создать сеть, содержащую слой сложения, необходимо задать имя слоя.

Свойства

развернуть все

Количество входных параметров к слою, заданному как положительное целое число.

Входные параметры имеют имена 'in1','in2',...,'inN', где N равняется NumInputs. Например, если NumInputs равняется 3, то входные параметры имеют имена 'in1','in2' и 'in3'. Используйте входные имена при соединении или разъединении слоя при помощи connectLayers или disconnectLayers.

Имя слоя, заданное как вектор символов или скаляр строки. Чтобы включать этот слой в график слоя, необходимо задать имя слоя.

Типы данных: char | string

Введите имена, заданные как {'in1','in2',...,'inN'}, где N является количеством входных параметров слоя.

Типы данных: cell

Количество выходных параметров слоя. Этот слой имеет один вывод только.

Типы данных: double

Выведите имена слоя. Этот слой имеет один вывод только.

Типы данных: cell

Примеры

свернуть все

Создайте слой сложения с двумя входными параметрами и именем 'add_1'.

add = additionLayer(2,'Name','add_1')
add = 
  AdditionLayer with properties:

          Name: 'add_1'
     NumInputs: 2
    InputNames: {'in1'  'in2'}

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

relu_1 = reluLayer('Name','relu_1');
relu_2 = reluLayer('Name','relu_2');

lgraph = layerGraph;
lgraph = addLayers(lgraph,relu_1);
lgraph = addLayers(lgraph,relu_2);
lgraph = addLayers(lgraph,add);

lgraph = connectLayers(lgraph,'relu_1','add_1/in1');
lgraph = connectLayers(lgraph,'relu_2','add_1/in2');

plot(lgraph)

Создайте простую сеть направленного графа без петель (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

Введенный в R2017b