layerGraph

График слоев сети для глубокого обучения

Описание

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

Создание

Описание

пример

lgraph = layerGraph создает пустой график слоев, который не содержит слоев. Можно добавить слои в пустой график при помощи addLayers функция.

пример

lgraph = layerGraph(layers) создает график слоев из массива слоев сети и устанавливает Layers свойство. Слои в lgraph соединяются в том же последовательном порядке как в layers.

пример

lgraph = layerGraph(net) извлекает график слоев SeriesNetwork или DAGNetwork объект. Например, можно извлечь график слоев предварительно обученной сети, чтобы использовать обучение с переносом.

lgraph = layerGraph(dlnet) извлекает график слоев dlnetwork. Используйте этот синтаксис, чтобы использовать dlnetwork с trainNetwork функция или Deep Network Designer.

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

развернуть все

Обучивший сеть в виде SeriesNetwork или DAGNetwork объект. Можно получить обучивший сеть путем импорта предварительно обученной сети (например, при помощи googlenet функция) или по образованию ваше собственное сетевое использование trainNetwork.

Сеть для пользовательских учебных циклов в виде dlnetwork объект.

Для dlnetwork введите, программное обеспечение извлекает числовые данные из настраиваемых параметров и преобразует их в одинарную точность.

Свойства

развернуть все

Это свойство доступно только для чтения.

Слоя сети в виде Layer массив.

Это свойство доступно только для чтения.

Связи слоя в виде таблицы с двумя столбцами.

Каждая строка таблицы представляет связь в графике слоев. Первый столбец, Source, задает источник каждой связи. Второй столбец, Destination, задает место назначения каждой связи. Источники связи и места назначения являются или именами слоя или имеют форму 'layerName/IOName', где 'IOName' имя ввода или вывода слоя.

Типы данных: table

Это свойство доступно только для чтения.

Сетевой входной слой называет в виде массива ячеек из символьных векторов.

Типы данных: cell

Сетевой выходной слой называет в виде массива ячеек из символьных векторов.

Типы данных: cell

Функции объекта

addLayersДобавьте слои в график слоев
removeLayersУдалите слои из графика слоев
replaceLayerЗамените слой в графике слоев
connectLayersСоедините слои в графике слоев
disconnectLayersОтключите слои в графике слоев
plotПостройте график слоев нейронной сети

Примеры

свернуть все

Создайте пустой график слоев и массив слоев. Добавьте слои в график слоев и постройте график. addLayers соединяет слои последовательно.

lgraph = layerGraph;

layers = [
    imageInputLayer([32 32 3],'Name','input')  
    convolution2dLayer(3,16,'Padding','same','Name','conv_1')
    batchNormalizationLayer('Name','BN_1')
    reluLayer('Name','relu_1')];

lgraph = addLayers(lgraph,layers);
figure
plot(lgraph)

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

Создайте массив слоев.

layers = [
    imageInputLayer([28 28 1],'Name','input')  
    convolution2dLayer(3,16,'Padding','same','Name','conv_1')
    batchNormalizationLayer('Name','BN_1')
    reluLayer('Name','relu_1')];

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

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

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

Загрузите предварительно обученную сеть SqueezeNet. Можно использовать, это обучило сеть для классификации и предсказания.

net = squeezenet;

Чтобы изменить структуру сети, сначала извлеките структуру сети DAG при помощи layerGraph. Можно затем использовать объектные функции LayerGraph изменить сетевую архитектуру.

lgraph = layerGraph(net)
lgraph = 
  LayerGraph with properties:

         Layers: [68x1 nnet.cnn.layer.Layer]
    Connections: [75x2 table]
     InputNames: {'data'}
    OutputNames: {'ClassificationLayer_predictions'}

Создайте простую сеть направленного графа без петель (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
Введенный в R2017b