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

Создайте сеть, которая состоит из четырех повторяющихся блоков слоев. Добавить префикс «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)

Создайте сеть энкодера с четырьмя операциями понижающей дискретизации от предварительно обученной сети 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) объект.

Совет

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

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

Введенный в R2021a