analyzeNetwork

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

Синтаксис

Описание

пример

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