blockedNetwork

Создайте сеть с повторением блочной структуры

Описание

пример

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

Эта функция требует Deep Learning 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)];

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

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 Объект (Deep Learning Toolbox).

Советы

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

  • Соедините сеть энкодера с сетью декодера использование encoderDecoderNetwork функция.

Введенный в R2021a