analyzeNetwork

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

Синтаксис

analyzeNetwork(layers)

Описание

пример

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

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

Примеры

свернуть все

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

net = googlenet
net = 
  DAGNetwork with properties:

         Layers: [144×1 nnet.cnn.layer.Layer]
    Connections: [170×2 table]

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

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

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

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

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

analyzeNetwork(net)

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

layers = [
    imageInputLayer([32 32 3],'Name','input')
    
    convolution2dLayer(5,16,'Padding','same','Name','conv_1')
    reluLayer('Name','relu_1')
    
    convolution2dLayer(3,16,'Padding','same','Stride',2,'Name','conv_2')
    reluLayer('Name','relu_2') 
    additionLayer(2,'Name','add1')
    
    convolution2dLayer(3,16,'Padding','same','Stride',2,'Name','conv_3')
    reluLayer('Name','relu_3') 
    additionLayer(3,'Name','add2')
    
    fullyConnectedLayer(10,'Name','fc')
    classificationLayer('Name','output')];

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)

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

  • softmax слой, который выходные вероятности класса, должен предшествовать слою классификации. Чтобы зафиксировать ошибку в слое классификации output, добавьте softmax слой перед слоем классификации.

  • Слой 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],'Name','input')
    
    convolution2dLayer(5,16,'Padding','same','Name','conv_1')
    reluLayer('Name','relu_1')
    
    convolution2dLayer(3,16,'Padding','same','Stride',1,'Name','conv_2')
    reluLayer('Name','relu_2') 
    additionLayer(2,'Name','add1')
    
    convolution2dLayer(3,16,'Padding','same','Stride',2,'Name','conv_3')
    reluLayer('Name','relu_3') 
    additionLayer(2,'Name','add2')
    
    fullyConnectedLayer(10,'Name','fc')
    softmaxLayer('Name','softmax');
    classificationLayer('Name','output')];

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)

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

свернуть все

Сетевая архитектура, заданная как массив Layer, объект LayerGraph, объект SeriesNetwork или объект DAGNetwork.

Введенный в R2018a