exponenta event banner

analyzeNetwork

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

Описание

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

пример

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

Совет

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

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 отображает интерактивный график сетевой архитектуры и таблицу, содержащую информацию о сетевых уровнях.

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

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

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

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

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

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

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