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

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

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

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

Отобразите общее количество настраиваемых параметров на каждом слое, щелкнув стреле в правом верхнем углу таблицы слоев и выбрав 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);

Создайте ярлыковые соединения. Одно из ярлыковых соединений содержит один сверточный слой 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 перед классификационным слоем.

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

  • The 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