exponenta event banner

sequenceFoldingLayer

Последовательность слоев складывания

Описание

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

Чтобы использовать слой последовательного сворачивания, необходимо подключить miniBatchSize вывод в miniBatchSize ввод соответствующего слоя развертки последовательности. Пример см. в разделе Создание сети для классификации видео.

Создание

Описание

layer = sequenceFoldingLayer создает слой сворачивания последовательности.

пример

layer = sequenceFoldingLayer('Name',Name) создает слой складывания последовательности и задает необязательный Name с использованием пары имя-значение. Например, sequenceFoldingLayer('Name','fold1') создает слой складывания последовательности с именем 'fold1'. Заключите имя свойства в одинарные кавычки.

Свойства

развернуть все

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

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

Количество входов слоя. Этот слой принимает только один вход.

Типы данных: double

Входные имена слоя. Этот слой принимает только один вход.

Типы данных: cell

Количество выходов уровня.

Уровень имеет два выхода:

  • 'out' - Карта функций вывода, соответствующая преобразованному входу.

  • 'miniBatchSize' - размер мини-партии, передаваемой в слой. Этот выход должен быть подключен к 'miniBatchSize' ввод соответствующего слоя развертки последовательности.

Типы данных: double

Выходные имена слоя.

Уровень имеет два выхода:

  • 'out' - Карта функций вывода, соответствующая преобразованному входу.

  • 'miniBatchSize' - размер мини-партии, передаваемой в слой. Этот выход должен быть подключен к 'miniBatchSize' ввод соответствующего слоя развертки последовательности.

Типы данных: cell

Примеры

свернуть все

Создайте слой сворачивания последовательности с именем 'fold1'.

layer = sequenceFoldingLayer('Name','fold1')
layer = 
  SequenceFoldingLayer with properties:

           Name: 'fold1'
     NumOutputs: 2
    OutputNames: {'out'  'miniBatchSize'}

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

  • Для ввода последовательностей изображений в сеть используется уровень ввода последовательностей.

  • Чтобы применить сверточные операции независимо к каждому временному шагу, сначала преобразуйте последовательности изображений в массив изображений, используя слой складывания последовательностей.

  • Чтобы восстановить структуру последовательности после выполнения этих операций, преобразуйте этот массив изображений обратно в последовательности изображений, используя слой развертки последовательности.

  • Чтобы преобразовать изображения в векторы элементов, используйте плоский слой.

Затем векторные последовательности можно вводить в уровни LSTM и BiLSTM.

Определение сетевой архитектуры

Создайте сеть LSTM классификации, которая классифицирует последовательности изображений оттенков серого 28 на 28 в 10 классов.

Определите следующую архитектуру сети:

  • Входной слой последовательности с входным размером [28 28 1].

  • Сверток, пакетная нормализация и блок уровня ReLU с 20 фильтрами 5 на 5.

  • Уровень LSTM с 200 скрытыми блоками, который выводит только последний временной шаг.

  • Полностью соединенный слой размера 10 (количество классов), за которым следуют слой softmax и слой классификации.

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

inputSize = [28 28 1];
filterSize = 5;
numFilters = 20;
numHiddenUnits = 200;
numClasses = 10;

layers = [ ...
    sequenceInputLayer(inputSize,'Name','input')
    
    sequenceFoldingLayer('Name','fold')
    
    convolution2dLayer(filterSize,numFilters,'Name','conv')
    batchNormalizationLayer('Name','bn')
    reluLayer('Name','relu')
    
    sequenceUnfoldingLayer('Name','unfold')
    flattenLayer('Name','flatten')
    
    lstmLayer(numHiddenUnits,'OutputMode','last','Name','lstm')
    
    fullyConnectedLayer(numClasses, 'Name','fc')
    softmaxLayer('Name','softmax')
    classificationLayer('Name','classification')];

Преобразование слоев в график слоев и соединение miniBatchSize вывод слоя складывания последовательности на соответствующий вход слоя развертывания последовательности.

lgraph = layerGraph(layers);
lgraph = connectLayers(lgraph,'fold/miniBatchSize','unfold/miniBatchSize');

Просмотр окончательной сетевой архитектуры с помощью plot функция.

figure
plot(lgraph)

Figure contains an axes. The axes contains an object of type graphplot.

Расширенные возможности

Создание кода графического процессора
Создание кода CUDA ® для графических процессоров NVIDIA ® с помощью Coder™ графических процессоров

.
Представлен в R2019a