layerGraph

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

Описание

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

Создание

Описание

пример

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

пример

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

пример

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

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

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

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

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

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

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

Свойства

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

Сетевые слои, заданные как 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)

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

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)

Загрузите предварительно обученную squeezenet сеть. Если Модель Deep Learning Toolbox™ для пакета Сетевой поддержки 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. Связи ярлыка позволяют градиентам параметра течь более легко от выходного слоя до более ранних слоев сети.

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

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

Советы

  • Графики слоя не могут задать архитектуру сетей долгой краткосрочной памяти (LSTM). Для получения дополнительной информации о том, как создать сеть LSTM, смотрите Длинные Краткосрочные Сети Памяти.

Введенный в R2017b