DAGNetwork

Сеть Directed acyclic graph (DAG) для глубокого обучения

Описание

Сеть ДАГА является нейронной сетью для глубокого обучения для слоев, расположенных как направленный граф без петель. Сеть ДАГА может иметь более комплексную архитектуру, в которой слои имеют входные параметры от нескольких слоев и выходных параметров к нескольким слоям. Объект DAGNetwork имеет один входной слой и один выходной слой.

Создание

Существует несколько способов создать объект DAGNetwork:

Примечание

Чтобы узнать о других предварительно обученных сетях, смотрите Предварительно обученные Глубокие нейронные сети.

Свойства

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

Сетевые слои, заданные как массив Layer.

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

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

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

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

activationsВычислите сверточные активации слоя нейронной сети
classifyКлассифицируйте данные с помощью обученной глубокой нейронной сети
predictПредскажите ответы с помощью обученной глубокой нейронной сети
plotПостройте график слоя нейронной сети

Примеры

свернуть все

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

Расширенные возможности

Введенный в R2017b