connectLayers

Соедините слои в графике слоев

Описание

пример

newlgraph = connectLayers(lgraph,s,d) соединяет исходный слой s к целевому слою d в графике слоев lgraph. Новый график слоев, newlgraph, содержит те же слои как lgraph и включает новую связь.

Примеры

свернуть все

Создайте слой сложения с двумя входными параметрами и именем '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 object. The axes object contains an object of type graphplot.

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

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

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

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

layers = [
    imageInputLayer([28 28 1])
    
    convolution2dLayer(5,16,'Padding','same')
    batchNormalizationLayer
    reluLayer('Name','relu_1')
    
    convolution2dLayer(3,32,'Padding','same','Stride',2)
    batchNormalizationLayer
    reluLayer
    convolution2dLayer(3,32,'Padding','same')
    batchNormalizationLayer
    reluLayer
    
    additionLayer(2,'Name','add')
    
    averagePooling2dLayer(2,'Stride',2)
    fullyConnectedLayer(10)
    softmaxLayer
    classificationLayer];

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

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

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

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

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

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

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

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

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

Загрузите данные об обучении и валидации, которые состоят из 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);

Figure Training Progress (25-Aug-2021 07:29:55) contains 2 axes objects and another object of type uigridlayout. Axes object 1 contains 15 objects of type patch, text, line. Axes object 2 contains 15 objects of type patch, text, line.

Отобразите свойства обучившего сеть. Сетью является DAGNetwork объект.

net
net = 
  DAGNetwork with properties:

         Layers: [16x1 nnet.cnn.layer.Layer]
    Connections: [16x2 table]
     InputNames: {'imageinput'}
    OutputNames: {'classoutput'}

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

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

Входные параметры

свернуть все

График слоев в виде LayerGraph объект. Чтобы создать график слоев, использовать layerGraph.

Источник связи в виде вектора символов или строкового скаляра.

  • Если исходный слой имеет один выход, то s имя слоя.

  • Если исходный слой имеет несколько выходных параметров, то s имя слоя, сопровождаемое символом / и имя слоя выход: 'layerName/outputName'.

Пример: 'conv1'

Пример: 'mpool/indices'

Место назначения связи в виде вектора символов или строкового скаляра.

  • Если целевой слой имеет один вход, то d имя слоя.

  • Если целевой слой имеет несколько входных параметров, то d имя слоя, сопровождаемое символом / и имя входа слоя: 'layerName/inputName'.

Пример: 'fc'

Пример: 'addlayer1/in2'

Выходные аргументы

свернуть все

Выведите график слоев, возвращенный как LayerGraph объект.

Введенный в R2017b