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