Нейронная сеть для глубокого обучения

Чтобы создать пользовательский слой, который сам определяет график слоев, можно задать dlnetwork объект как настраиваемый параметр. Этот способ известен как состав сети. Можно использовать сетевую композицию для:

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

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

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

Для примера, показывающего, как задать пользовательский слой, содержащий обучаемое dlnetwork объект, см. «Определение вложенного слоя глубокого обучения».

Пример, показывающий, как обучить сеть с вложенными слоями, см. Train Нейронной сети для глубокого обучения с Вложенными слоями.

Автоматическая инициализация обучаемых dlnetwork Объекты для обучения

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

Чтобы воспользоваться преимуществами автоматической инициализации, необходимо указать, что функция конструктора создает неинициализированное dlnetwork объект. Создание неинициализированного dlnetwork объект, установите Initialize name-value опции к false. Вам не нужно задавать слой входа, поэтому не нужно задавать размер входа для слоя.

function layer = myLayer
    
    % Initialize layer properties.
    ...

    % Define network.
    layers = [
        % Network layers go here.
        ];

    layer.Network = dlnetwork(lgraph,'Initialize',false);
end

Когда родительская сеть инициализируется, настраиваемые параметры любого вложенного dlnetwork объекты инициализируются одновременно. Размер настраиваемых параметров зависит от размера входных данных пользовательского слоя. Программа распространяет данные через вложенную сеть и автоматически инициализирует параметры в соответствии с размерами распространения и свойствами инициализации слоев вложенной сети.

Если родительская сеть обучена с помощью trainNetwork функцию, затем все вложенные dlnetwork объекты инициализируются при вызове trainNetwork. Если родительская сеть является dlnetwork, затем все вложенные dlnetwork объекты инициализируются при построении родительской сети (если она является родительской dlnetwork инициализируется при конструкции) или когда вы используете initialize функция с родительской сетью (если родительский элемент dlnetwork не инициализирован при конструкции).

Кроме того, вместо отсрочки инициализации вложенной сети можно создать пользовательский слой с уже инициализированной вложенной сетью. Это означает, что вложенная сеть инициализируется перед родительской сетью Это требует ручного определения размера любых входов для вложенной сети. Вы можете сделать это либо при помощи входных слоев, либо путем предоставления примера входов dlnetwork функция конструктора. Потому что вы должны задать размеры любых входов в dlnetwork объект может потребоваться задать входные размеры при создании слоя. Для помощи с определением размера входов слоя можно использовать analyzeNetwork и проверяйте размер активаций предыдущих слоев.

Функции предсказания и передачи

Некоторые слои ведут себя по-разному во время обучения и во время предсказания. Для примера слой отсева выполняет отсев только во время обучения и не имеет эффекта во время предсказания. Слой использует одну из двух функций, чтобы выполнить прямой проход: predict или forward. Если прямой проход находится во времени предсказания, то слой использует predict функция. Если прямой проход находится во времени обучения, то слой использует forward функция. Если вы не требуете двух разных функций для времени предсказания и времени обучения, то можно опустить forward функция. В этом случае слой использует predict во время обучения.

При реализации predict и forward функций пользовательского слоя, чтобы гарантировать, что слои в dlnetwork объект ведет себя правильно, используйте predict и forward функции для dlnetwork объекты, соответственно.

Пользовательские слои с обучаемыми dlnetwork объекты не поддерживают пользовательские обратные функции.

Вы все еще должны назначить значение выходному аргументу памяти forward функция.

Этот пример кода показывает, как использовать predict и forward функции с dlnetwork вход.

function Z = predict(layer,X)

    % Convert input data to formatted dlarray.
    X = dlarray(X,'SSCB');

    % Predict using network.
    dlnet = layer.Network;
    Z = predict(dlnet,X);
            
    % Strip dimension labels.
    Z = stripdims(Z);
end

function [Z,memory] = forward(layer,X)

    % Convert input data to formatted dlarray.
    X = dlarray(X,'SSCB');

    % Forward pass using network.
    dlnet = layer.Network;
    Z = forward(dlnet,X);
            
    % Strip dimension labels.
    Z = stripdims(Z);

    memory = [];
end

Если на dlnetwork объект не ведет себя по-разному во время обучения и предсказания, тогда можно опускать прямую функцию. В этом случае программное обеспечение использует predict функция во время обучения.

Поддерживаемые слои

Пользовательские слои поддерживают dlnetwork объекты, которые не требуют обновления состояния. Это означает, что dlnetwork объект не должен содержать слои, которые имеют состояние, например, слои нормализации партии . и LSTM.

В этом списке показаны встроенные слои, которые полностью поддерживают состав сети.

Входные слои

СлойОписание

imageInputLayer

Входной слой изображений вводит 2-D изображения в сеть и применяет нормализацию данных.

image3dInputLayer

A входного слоя 3-D изображения вводит 3-D изображения или объемы в сеть и применяет нормализацию данных.

sequenceInputLayer

Входной слой последовательности вводит данные последовательности в сеть.

featureInputLayer

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

Свертки и полносвязные слои

СлойОписание

convolution2dLayer

Сверточный слой 2-D применяет сверточные фильтры скольжения к входу.

convolution3dLayer

Сверточный слой 3-D применяет скользящие кубоидные фильтры свертки к трехмерному входу.

groupedConvolution2dLayer

Сгруппированный 2-D сверточный слой разделяет входные каналы на группы и применяет скользящие сверточные фильтры. Используйте сгруппированные сверточные слои для разделяемой по каналу (также известной как разделяемая по глубине) свертки.

transposedConv2dLayer

Транспонированный 2-D слой свертки преобразует функции.

transposedConv3dLayer

Транспонированный 3-D слой свертки повышает качество трехмерных карт функций.

fullyConnectedLayer

A полносвязного слоя умножает вход на весовую матрицу и затем добавляет вектор смещения.

Слои активации

СлойОписание

reluLayer

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

leakyReluLayer

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

clippedReluLayer

Обрезанный слой ReLU выполняет операцию порога, где любое входное значение, меньше нуля, устанавливается равным нулю, а любое значение над усечением устанавливается равным этому усечению.

eluLayer

Слой активации ELU выполняет операцию тождеств на положительных входах и экспоненциальную нелинейность на отрицательных входах.

swishLayer

Слой активации качания применяет функцию качания к входам слоя.

tanhLayer

Слой активации гиперболического тангенса (tanh) применяет функцию tanh к входам слоя.

softmaxLayer

Слой softmax применяет функцию softmax к входу.

Нормализация, выпадение и обрезка слоев

СлойОписание

groupNormalizationLayer

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

layerNormalizationLayer

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

crossChannelNormalizationLayer

Слой нормализации локального отклика (перекрестного канала) канала выполняет нормализацию канала.

dropoutLayer

Выпадающий слой случайным образом устанавливает элементы входа для нуля с заданной вероятностью.

crop2dLayer

Слой обрезки 2-D применяется 2-D обрезки к входу.

Объединение и удаление слоев

СлойОписание

averagePooling2dLayer

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

averagePooling3dLayer

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

globalAveragePooling2dLayer

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

globalAveragePooling3dLayer

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

maxPooling2dLayer

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

maxPooling3dLayer

Слой объединения 3-D max выполняет понижающую дискретизацию, деля трехмерный вход на кубоидные области объединения и вычисляя максимум каждой области.

globalMaxPooling2dLayer

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

globalMaxPooling3dLayer

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

maxUnpooling2dLayer

Максимальный слой отмены охлаждения отменяет восстановление выхода максимального слоя объединения.

Комбинированные слои

СлойОписание

additionLayer

Слой сложения добавляет входов из нескольких слоев нейронной сети поэлементно.

multiplicationLayer

Слой умножения умножает входы от нескольких нейронных слоев сети поэлементных.

depthConcatenationLayer

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

concatenationLayer

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

Совместимость с GPU

Если функции слоя forward полностью поддерживают dlarray объекты, тогда слой совместим с графическим процессором. В противном случае, чтобы быть совместимым с графический процессор, функции слоя должны поддерживать входы и выходные выходы возврата типа gpuArray (Parallel Computing Toolbox).

Многие MATLAB® поддержка встроенных функций gpuArray (Parallel Computing Toolbox) и dlarray входные параметры. Список функций, поддерживающих dlarray объекты, см. Список функций с поддержкой dlarray. Список функций, которые выполняются на графическом процессоре, см. в разделе Запуск функций MATLAB на графическом процессоре (Parallel Computing Toolbox). Для использования графический процессор для глубокого обучения необходимо иметь также поддерживаемое графический процессор. Для получения информации о поддерживаемых устройствах смотрите Поддержку GPU by Release (Parallel Computing Toolbox). Для получения дополнительной информации о работе с графическими процессорами в MATLAB, смотрите GPU Computing в MATLAB (Parallel Computing Toolbox).

См. также

| | | |

Похожие темы