analyzeNetwork

Анализируйте архитектуру нейронной сети для глубокого обучения

Описание

Использование analyzeNetwork чтобы визуализировать и изучить архитектуру сети, проверяйте, что вы задали архитектуру правильно и обнаруживаете проблемы перед обучением. Проблемы это analyzeNetwork обнаруживает включают пропавших без вести или несвязанные слои, неправильно измеренные входные параметры слоя, неправильное количество входных параметров слоя и недопустимые структуры графика.

Совет

Чтобы в интерактивном режиме визуализировать, анализируйте, и обучите сеть, используйте deepNetworkDesigner(net). Для получения дополнительной информации смотрите Deep Network Designer.

Обучивший нейронные сети

пример

analyzeNetwork(net) анализирует SeriesNetwork или DAGNetwork объект net. Функция отображает интерактивную визуализацию сетевой архитектуры и предоставляет подробную информацию о слоях сети. Информация о слое включает номер и размеры активаций слоя, настраиваемых параметров и параметров состояния.

Слоя сети

пример

analyzeNetwork(layers) анализирует слоя сети, заданные в layers и также обнаруживает ошибки и проблемы для trainNetwork рабочие процессы. layers может быть Layer массив или LayerGraph объект. Функция отображает интерактивную визуализацию сетевой архитектуры и предоставляет подробную информацию о слоях сети. Информация о слое включает номер и размеры активаций слоя, настраиваемых параметров и параметров состояния.

пример

analyzeNetwork(layers,'TargetUsage',target) анализирует слоя сети, заданные в layers для заданного целевого рабочего процесса. Используйте этот синтаксис при анализе Layer массив или график слоев для dlnetwork рабочие процессы.

analyzeNetwork(layers,dlX1,...,dlXn,'TargetUsage','dlnetwork') анализирует слоя сети с помощью входных данных сетей в качестве примера dlX1,...,dlXn. Программное обеспечение распространяет входные параметры в качестве примера через сеть, чтобы определить номер и размеры активаций слоя, настраиваемых параметров и параметров состояния. Используйте этот синтаксис, чтобы анализировать сеть, которая имеет одни или несколько входных параметров, которые не соединяются с входным слоем.

dlnetwork Объекты

analyzeNetwork(dlnet) анализирует dlnetwork объект для пользовательских учебных рабочих процессов цикла. Функция отображает интерактивную визуализацию сетевой архитектуры и предоставляет подробную информацию о слоях сети. Информация о слое включает номер и размеры активаций слоя, настраиваемых параметров и параметров состояния.

analyzeNetwork(dlnet,dlX1,...,dlXn) анализирует dlnetwork объект с помощью сетей в качестве примера вводит dlX1,...,dlXn. Программное обеспечение распространяет входные параметры в качестве примера через сеть, чтобы определить номер и размеры активаций слоя, настраиваемых параметров и параметров состояния. Используйте этот синтаксис, чтобы анализировать неинициализированный dlnetwork это имеет одни или несколько входных параметров, которые не соединяются с входным слоем.

Примеры

свернуть все

Загрузите предварительно обученную сверточную нейронную сеть GoogLeNet.

net = googlenet
net = 
  DAGNetwork with properties:

         Layers: [144×1 nnet.cnn.layer.Layer]
    Connections: [170×2 table]
     InputNames: {'data'}
    OutputNames: {'output'}

Анализируйте сеть. analyzeNetwork отображает интерактивный график сетевой архитектуры и таблицу, содержащую информацию о слоях сети.

Исследуйте сетевую архитектуру с помощью графика налево. Выберите слой в графике. Выделенный слой подсвечен в графике и в таблице слоя.

В таблице просмотрите информацию о слое, такую как свойства слоя, тип слоя и размеры активаций слоя и настраиваемых параметров. Активациями слоя являются выходные параметры того слоя.

Выберите более глубокий слой в сети. Заметьте, что активации в более глубоких слоях меньше в пространственных размерностях (первые две размерности) и больше в размерности канала (последняя размерность). Используя эту структуру позволяет сверточным нейронным сетям постепенно увеличить число извлеченных функций изображений при уменьшении пространственного разрешения.

Покажите общее количество настраиваемых параметров в каждом слое путем нажатия на стрелку в верхнем правом углу таблицы слоя и выберите Total Learnables. Чтобы отсортировать таблицу слоя по значению столбца, наведите мышь на заголовок столбца и кликните по стреле, которая появляется. Например, можно определить, какой слой содержит большинство параметров путем сортировки слоев по общему количеству настраиваемых параметров.

analyzeNetwork(net)

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

layers = [
    imageInputLayer([32 32 3])
    
    convolution2dLayer(5,16,'Padding','same')
    reluLayer('Name','relu_1')
    
    convolution2dLayer(3,16,'Padding','same','Stride',2)
    reluLayer
    additionLayer(2,'Name','add1')
    
    convolution2dLayer(3,16,'Padding','same','Stride',2)
    reluLayer
    additionLayer(3,'Name','add2')
    
    fullyConnectedLayer(10)
    softmaxLayer
    classificationLayer];

lgraph = layerGraph(layers);

Создайте связи ярлыка. Одна из связей ярлыка содержит один сверточный слой skipConv 1 на 1.

skipConv = convolution2dLayer(1,16,'Stride',2,'Name','skipConv');
lgraph = addLayers(lgraph,skipConv);
lgraph = connectLayers(lgraph,'relu_1','add1/in2');
lgraph = connectLayers(lgraph,'add1','add2/in2');

Анализируйте сетевую архитектуру. analyzeNetwork находит четыре ошибки в сети.

analyzeNetwork(lgraph)

Исследуйте и зафиксируйте ошибки в сети. В этом примере следующие проблемы вызывают ошибки:

  • skipConv слой не соединяется с остальной частью сети. Это должна быть часть связи ярлыка между add1 и add2 слои. Чтобы зафиксировать эту ошибку, соедините add1 к skipConv и skipConv к add2.

  • add2 слой задан, чтобы иметь три входных параметров, но слои только имеют два входных параметров. Чтобы зафиксировать ошибку, задайте количество входных параметров как 2.

  • Все входные параметры к слою сложения должны иметь тот же размер, но add1 слой имеет два входных параметров с различными размерами. Поскольку conv_2 слой имеет 'Stride' значение 2, этот слой прореживает активации на коэффициент два в первых двух размерностях (пространственные размерности). Изменить размер входа от relu2 слой так, чтобы это имело тот же размер как вход от relu1, удалите субдискретизацию путем установки 'Stride' значение conv_2 слой к 1.

Примените эти модификации к конструкции графика слоев с начала этого примера и создайте новый график слоев.

layers = [
    imageInputLayer([32 32 3])
    
    convolution2dLayer(5,16,'Padding','same')
    reluLayer('Name','relu_1')
    
    convolution2dLayer(3,16,'Padding','same','Stride',1)
    reluLayer
    additionLayer(2,'Name','add1')
    
    convolution2dLayer(3,16,'Padding','same','Stride',2)
    reluLayer
    additionLayer(2,'Name','add2')
    
    fullyConnectedLayer(10)
    softmaxLayer
    classificationLayer];

lgraph = layerGraph(layers);

skipConv = convolution2dLayer(1,16,'Stride',2,'Name','skipConv');
lgraph = addLayers(lgraph,skipConv);
lgraph = connectLayers(lgraph,'relu_1','add1/in2');
lgraph = connectLayers(lgraph,'add1','skipConv');
lgraph = connectLayers(lgraph,'skipConv','add2/in2');

Анализируйте новую архитектуру. Новая сеть не содержит ошибок и готова быть обученной.

analyzeNetwork(lgraph)

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

layers = [
    imageInputLayer([28 28 1],'Normalization','none','Name','input')
    convolution2dLayer(5, 20,'Name','conv1')
    batchNormalizationLayer('Name','bn1')
    reluLayer('Name','relu1')
    convolution2dLayer(3,20,'Padding',1,'Name','conv2')
    batchNormalizationLayer('Name','bn2')
    reluLayer('Name','relu2')
    convolution2dLayer(3, 20,'Padding', 1,'Name','conv3')
    batchNormalizationLayer('Name','bn3')
    reluLayer('Name','relu3')
    fullyConnectedLayer(10,'Name','fc')
    softmaxLayer('Name','softmax')];

lgraph = layerGraph(layers);

Анализируйте график слоев с помощью analyzeNetwork функция и набор 'TargetUsage' опция к 'dlnetwork'.

analyzeNetwork(lgraph,'TargetUsage','dlnetwork')

Здесь, функция не сообщает ни о каких проблемах с графиком слоев.

Чтобы анализировать сеть, которая имеет вход, который не соединяется с входным слоем, можно предоставить входные параметры сети в качестве примера analyzeNetwork функция. Можно обеспечить входные параметры в качестве примера, когда вы анализируете dlnetwork объекты, или когда вы анализируете Layer массивы или LayerGraph объекты для пользовательских учебных рабочих процессов с помощью 'TargetUsage','dlnetwork' опция значения имени.

Определить сетевую архитектуру. Создайте сеть с двумя ветвями. Сеть берет два входных параметров с одним входом на ветвь. Соедините ветви с помощью слоя сложения.

numFilters = 24;
inputSize = [64 64 3];

layersBranch1 = [
    imageInputLayer(inputSize,'Normalization','none','Name','input')
    convolution2dLayer(3,6*numFilters,'Padding','same','Stride',2,'Name','conv1Branch1')
    groupNormalizationLayer('all-channels','Name','gn1Branch1')
    reluLayer('Name','relu1Branch1')
    convolution2dLayer(3,numFilters,'Padding','same','Name','conv2Branch1')
    groupNormalizationLayer('channel-wise','Name','gn2Branch1')
    additionLayer(2,'Name','add')
    reluLayer('Name','reluCombined')
    fullyConnectedLayer(10,'Name','fc')
    softmaxLayer('Name','sm')];

layersBranch2 = [
    convolution2dLayer(1,numFilters,'Name','convBranch2')
    groupNormalizationLayer('all-channels','Name','gnBranch2')];

lgraph = layerGraph(layersBranch1);
lgraph = addLayers(lgraph,layersBranch2);
lgraph = connectLayers(lgraph,'gnBranch2','add/in2');  

Создайте dlnetwork. Поскольку эта сеть содержит несвязанный вход, создайте неинициализированный dlnetwork объект путем установки 'Initialize' опция значения имени к false.

dlnet = dlnetwork(lgraph,'Initialize',false);

Создайте входные параметры сети в качестве примера, одного размера и формат как типичные входные параметры для этой сети. Для обоих входных параметров используйте пакетный размер 32. Используйте вход размера 64 64 с тремя каналами для входа к слою 'input'. Используйте вход размера 64 64 с 18 каналами для входа к слою 'convBranch2'.

exampleInput = dlarray(rand([inputSize 32]),'SSCB');
exampleConvBranch2 = dlarray(rand([32 32 18 32]),'SSCB');

Исследуйте Layers свойство сети определить порядок, в котором можно подать входные сигналы в качестве примера.

dlnet.Layers
ans = 
  12×1 Layer array with layers:

     1   'input'          Image Input           64×64×3 images
     2   'conv1Branch1'   Convolution           144 3×3 convolutions with stride [2  2] and padding 'same'
     3   'gn1Branch1'     Group Normalization   Group normalization
     4   'relu1Branch1'   ReLU                  ReLU
     5   'conv2Branch1'   Convolution           24 3×3 convolutions with stride [1  1] and padding 'same'
     6   'gn2Branch1'     Group Normalization   Group normalization
     7   'add'            Addition              Element-wise addition of 2 inputs
     8   'reluCombined'   ReLU                  ReLU
     9   'fc'             Fully Connected       10 fully connected layer
    10   'sm'             Softmax               softmax
    11   'convBranch2'    Convolution           24 1×1 convolutions with stride [1  1] and padding [0  0  0  0]
    12   'gnBranch2'      Group Normalization   Group normalization

Анализируйте сеть. Обеспечьте входные параметры в качестве примера в том же порядке как слои, которые требуют, чтобы входные параметры появились в Layers свойство dlnetwork. Необходимо обеспечить вход в качестве примера для всех сетевых входных параметров, включая входные параметры, которые соединяются с входным слоем.

analyzeNetwork(dlnet,exampleInput,exampleConvBranch2)

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

свернуть все

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

Слоя сети в виде Layer массив или LayerGraph объект.

Для списка встроенных слоев смотрите Список слоев глубокого обучения.

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

Целевой рабочий процесс в виде одного из следующего:

  • 'trainNetwork' — Анализируйте график слоев для использования с trainNetwork функция. Например, функция проверяет, что график слоев имеет выходной слой и никакой разъединенный слой выходные параметры.

  • 'dlnetwork' — Анализируйте график слоев для использования с dlnetwork объекты. Например, функция проверяет, что график слоев не имеет никаких выходных слоев.

Сеть Example вводит в виде отформатированного dlarray объекты. Программное обеспечение распространяет входные параметры в качестве примера через сеть, чтобы определить номер и размеры активаций слоя, настраиваемых параметров и параметров состояния.

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

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

  • Layer массив — Обеспечивает входные параметры в качестве примера в том же порядке, что слои, которые требуют входных параметров, появляются в Layer массив.

  • LayerGraph — Обеспечьте входные параметры в качестве примера в том же порядке как слои, которые требуют, чтобы входные параметры появились в Layers свойство LayerGraph.

  • dlnetwork — Обеспечьте входные параметры в качестве примера в том же порядке, как входные параметры перечислены в InputNames свойство dlnetwork.

Если слой имеет несколько несвязанных входных параметров, то входные параметры в качестве примера для того слоя должны быть заданы отдельно в том же порядке, как они появляются в InputNames слоя свойство.

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

Введенный в R2018a