additionLayer

Описание

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

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

Создание

Описание

пример

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)

Figure contains an axes. The axes contains an object of type graphplot.

Создайте сеть простого ориентированного ациклического графика (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

Расширенные возможности

Генерация кода C/C + +
Сгенерируйте код C и C++ с помощью Coder™ MATLAB ®

.

Генерация кода GPU
Сгенерируйте код CUDA ® для графических процессоров NVIDIA ® с помощью GPU Coder™

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