exponenta event banner

layerGraph

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

Описание

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

Создание

Описание

пример

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

пример

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

пример

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

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

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

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

Сеть DAG, указанная как DAGNetwork объект.

Сеть для пользовательских циклов обучения, указанная как 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. The axes 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. The axes contains an object of type graphplot.

Загрузите предварительно обученную сеть SqueeEcNet. Этот обученный сетевой график можно использовать для классификации и прогнозирования.

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

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

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

Совет

  • Графики уровня не могут указывать архитектуру сетей LSTM. Дополнительные сведения о создании сети LSTM см. в разделе Сети долговременной памяти.

Представлен в R2017b