analyzeNetwork

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

Описание

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

пример

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

analyzeNetwork(layers) анализирует массив слоя layers и также обнаруживает ошибки и проблемы для trainNetwork рабочие процессы.

пример

analyzeNetwork(lgraph) анализирует график слоев lgraph и также обнаруживает ошибки и проблемы для trainNetwork рабочие процессы.

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

пример

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

Примеры

свернуть все

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

net = googlenet
net = 
  DAGNetwork with properties:

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

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

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

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

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

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

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)

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

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')

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

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

свернуть все

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

Слоя сети в виде Layer массив.

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

График слоев в виде LayerGraph объект. Чтобы создать график слоев, использовать layerGraph.

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

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

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

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

Введенный в R2018a