Соедините слои в график слоев
Создайте слой сложения с двумя входами и именем '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'
. 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
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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.