Соединение слоев в графике слоев
Создание слоя сложения с двумя входами и именем '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]
InputNames: {'input'}
OutputNames: {'classOutput'}
Классифицируйте изображения проверки и рассчитайте точность. Сеть очень точна.
YPredicted = classify(net,XValidation); accuracy = mean(YPredicted == YValidation)
accuracy = 0.9930
lgraph - График слоевLayerGraph объектГрафик слоев, заданный как LayerGraph объект. Чтобы создать график слоев, используйте layerGraph.
s - Источник подключенияИсточник соединения, заданный как вектор символа или скаляр строки.
Если исходный уровень имеет один выход, то s - имя слоя.
Если исходный уровень имеет несколько выходов, то s имя слоя, за которым следует символ/и имя вывода слоя: 'layerName/outputName'.
Пример: 'conv1'
Пример: 'mpool/indices'
d - Назначение подключенияНазначение соединения, указанное как вектор символа или скаляр строки.
Если целевой уровень имеет один вход, то d - имя слоя.
Если целевой уровень имеет несколько входов, то d имя слоя, за которым следует символ/и имя входного слоя: 'layerName/inputName'.
Пример: 'fc'
Пример: 'addlayer1/in2'
newlgraph - График выходного уровняLayerGraph объектГрафик выходного уровня, возвращаемый как LayerGraph объект.
addLayers | assembleNetwork | disconnectLayers | layerGraph | plot | removeLayers | replaceLayer
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.