exponenta event banner

blockedNetwork

Создание сети с повторяющейся структурой блоков

Описание

пример

net = blockedNetwork(fun,numBlocks) создает неинициализированную сеть, net, который состоит из numBlocks блоки слоев соединены последовательно. Функция fun создает каждый блок слоев.

Для выполнения этой функции требуется Toolbox™ глубокого обучения.

net = blockedNetwork(fun,numBlocks,'NamePrefix',namePrefix) добавляет префикс namePrefix ко всем именам слоев в сети.

Примеры

свернуть все

Определите функцию, создающую массив слоев. Первый блок имеет 32 фильтра в слоях свертки. Количество фильтров удваивается в каждом последовательном блоке.

unetBlock = @(block) [
    convolution2dLayer(3,2^(5+block))
    reluLayer
    convolution2dLayer(3,2^(5+block))
    reluLayer
    maxPooling2dLayer(2,"Stride",2)];

Создайте сеть, состоящую из четырех повторяющихся блоков слоев. Добавьте префикс «encoder_» ко всем именам слоев в сети.

net = blockedNetwork(unetBlock,4,"NamePrefix","encoder_")
net = 
  dlnetwork with properties:

         Layers: [20x1 nnet.cnn.layer.Layer]
    Connections: [19x2 table]
     Learnables: [16x3 table]
          State: [0x3 table]
     InputNames: {'encoder_Block1Layer1'}
    OutputNames: {'encoder_Block4Layer5'}
    Initialized: 0

Инициализируйте веса сети для ввода размера [224 224 3].

net = initialize(net,dlarray(zeros(224,224,3),"SSC"));

Отображение сети.

analyzeNetwork(net)

Создайте сеть кодера GAN с четырьмя операциями понижающей дискретизации из предварительно обученной сети GoogLeNet.

depth = 4;
[encoder,outputNames] = pretrainedEncoderNetwork('googlenet',depth);

Определите входной размер сети кодировщика.

inputSize = encoder.Layers(1).InputSize;

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

exampleInput = dlarray(zeros(inputSize),'SSC');
exampleOutput = cell(1,length(outputNames));
[exampleOutput{:}] = forward(encoder,exampleInput,'Outputs',outputNames);

Определите количество каналов в блоках декодера как длину третьего канала в каждой активации.

numChannels = cellfun(@(x) size(extractdata(x),3),exampleOutput);
numChannels = fliplr(numChannels(1:end-1));

Определите функцию, создающую массив слоев для одного блока декодера.

decoderBlock = @(block) [
    transposedConv2dLayer(2,numChannels(block),'Stride',2)
    convolution2dLayer(3,numChannels(block),'Padding','same')
    reluLayer
    convolution2dLayer(3,numChannels(block),'Padding','same')
    reluLayer];

Создайте модуль декодера с тем же количеством блоков повышающей дискретизации, что и блоки понижающей дискретизации в модуле кодера.

decoder = blockedNetwork(decoderBlock,depth);

Создайте сеть U-Net путем подключения модуля кодера и модуля декодера и добавления соединений пропуска.

net = encoderDecoderNetwork([224 224 3],encoder,decoder, ...
   'OutputChannels',3,'SkipConnections','concatenate')
net = 
  dlnetwork with properties:

         Layers: [139x1 nnet.cnn.layer.Layer]
    Connections: [167x2 table]
     Learnables: [116x3 table]
          State: [0x3 table]
     InputNames: {'data'}
    OutputNames: {'encoderDecoderFinalConvLayer'}
    Initialized: 1

Отображение сети.

analyzeNetwork(net)

Входные аргументы

свернуть все

Функция, создающая блоки слоев, заданная как функция с этой сигнатурой:

block = fun(blockIndex)

  • Вход в fun, blockIndex, - целое число в диапазоне [1, numBlocks].

  • Выходные данные fun, block, - слой или массив слоев.

Количество блоков в сети, указанное как положительное целое число.

Префикс ко всем именам слоев в сети, заданный как строковый или символьный вектор.

Типы данных: char | string

Выходные аргументы

свернуть все

Сеть с повторяющейся структурой блоков, возвращаемая как dlnetwork(Панель инструментов глубокого обучения).

Совет

  • dlnetwork (Deep Learning Toolbox) возвращено blockedNetwork не инициализирован и не готов к использованию с обучением или выводом. Для инициализации сети используйте initialize (Deep Learning Toolbox).

  • Подключение сети кодера к сети декодера с помощью encoderDecoderNetwork функция.

Представлен в R2021a