Чтобы создать пользовательский слой, который сам определяет график слоев, можно указать dlnetwork объект как обучаемый параметр. Этот способ известен как сетчатая композиция. Состав сетевого графика можно использовать для:
Создайте один пользовательский слой, представляющий блок обучаемых слоев, например остаточный блок.
Создайте сеть с потоком управления, например, сеть с секцией, которая может динамически изменяться в зависимости от входных данных.
Создайте сеть с контурами, например сеть с секциями, которые возвращают выходные данные в себя.
Пример определения пользовательского слоя, содержащего обучаемый dlnetwork см. раздел Определение вложенного слоя глубокого обучения.
Пример обучения сети с вложенными слоями см. в разделе Обучение сети глубокого обучения с вложенными слоями.
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 объект не ведет себя иначе во время обучения и прогнозирования, тогда можно опустить функцию forward. В этом случае программное обеспечение использует predict выполнять функции во время обучения.
Поддержка пользовательских слоев dlnetwork объекты, не требующие обновления состояния. Это означает, что dlnetwork объект не должен содержать слои, имеющие состояние, например, уровни пакетной нормализации и LSTM.
В этом списке показаны встроенные уровни, полностью поддерживающие сетевой состав.
| Слой | Описание |
|---|---|
| Уровень ввода изображения вводит 2-D изображения в сеть и применяет нормализацию данных. | |
| Входной слой 3-D изображения вводит 3-D изображения или объемы в сеть и применяет нормализацию данных. | |
| Входной уровень последовательности вводит данные последовательности в сеть. | |
| Входной уровень элемента вводит данные элемента в сеть и применяет нормализацию данных. Этот слой используется при наличии набора числовых скаляров, представляющих элементы (данные без пространственных или временных измерений). |
| Слой | Описание |
|---|---|
| 2-D сверточный слой применяет скользящие сверточные фильтры к входу. | |
| 3-D сверточный слой применяет скользящие кубические сверточные фильтры к трехмерному входу. | |
| 2-D сгруппированный сверточный слой разделяет входные каналы на группы и применяет скользящие сверточные фильтры. Используйте сгруппированные сверточные слои для разделяемых по каналам (также называемых разделяемыми по глубине) сверток. | |
| Транспонированный слой свертки 2-D увеличивает выборку карт элементов. | |
| Транспонированный 3-D сверточный слой увеличивает трехмерные карты признаков. | |
| Полностью связанный слой умножает входной сигнал на весовую матрицу и затем добавляет вектор смещения. |
| Слой | Описание |
|---|---|
| Уровень ReLU выполняет пороговую операцию для каждого элемента входа, где любое значение меньше нуля устанавливается равным нулю. | |
| Уровень ReLU с утечкой выполняет пороговую операцию, где любое входное значение, меньшее нуля, умножается на фиксированный скаляр. | |
| Подрезанный слой ReLU выполняет пороговую операцию, при которой любое входное значение меньше нуля устанавливается равным нулю, а любое значение выше подрезанного потолка устанавливается на этот подрезанный потолок. | |
| Уровень активации ЗЭС выполняет операцию идентификации на положительных входах и экспоненциальную нелинейность на отрицательных входах. | |
| Слой активации swish применяет функцию swish на входах слоев. | |
| Слой активации гиперболической касательной (tanh) применяет функцию tanh на входах слоя. | |
| Уровень softmax применяет функцию softmax к входу. |
| Слой | Описание |
|---|---|
| Уровень нормализации группы нормализует мини-пакет данных по сгруппированным подмножествам каналов для каждого наблюдения независимо. Чтобы ускорить обучение сверточной нейронной сети и снизить чувствительность к инициализации сети, используйте уровни групповой нормализации между сверточными слоями и нелинейностями, такими как уровни ReLU. | |
| Уровень нормализации уровня нормализует мини-пакет данных по всем каналам для каждого наблюдения независимо. Чтобы ускорить обучение повторяющихся и многослойных перцептронных нейронных сетей и снизить чувствительность к инициализации сети, используйте уровни нормализации уровня после обучаемых уровней, таких как LSTM и полностью соединенных уровней. | |
| Канальный уровень локальной (кросс-канальной) нормализации выполняет канальную нормализацию. | |
| Уровень отсева случайным образом устанавливает входные элементы в ноль с заданной вероятностью. | |
| Слой подрезки 2-D применяется 2-D обрезки к вводу. |
| Слой | Описание |
|---|---|
| Средний уровень объединения выполняет понижающую дискретизацию путем разделения входных данных на прямоугольные области объединения и вычисления средних значений каждой области. | |
| Уровень 3-D среднего объединения выполняет понижающую дискретизацию путем разделения трехмерного ввода на области кубического объединения и вычисления средних значений каждой области. | |
| Уровень глобального среднего объединения выполняет понижающую дискретизацию путем вычисления среднего значения высоты и ширины входного сигнала. | |
| 3-D уровень глобального среднего объединения выполняет понижающую дискретизацию путем вычисления среднего значения высоты, ширины и глубины входного сигнала. | |
| Уровень максимального объединения выполняет понижающую дискретизацию путем разделения входных данных на прямоугольные области объединения и вычисления максимума каждой области. | |
| Уровень объединения 3-D max выполняет понижающую дискретизацию путем разделения трехмерного ввода на области кубоидального объединения и вычисления максимума каждой области. | |
| Уровень глобального максимального пула выполняет понижающую дискретизацию путем вычисления максимума высоты и ширины входного сигнала. | |
| 3-D уровень глобального максимального объединения выполняет понижающую дискретизацию путем вычисления максимума высоты, ширины и глубины входного сигнала. | |
| Уровень макс. расхолаживания распаковывает выходные данные уровня макс. пула. |
| Слой | Описание |
|---|---|
| Уровень сложения добавляет входные данные от нескольких уровней нейронной сети по элементам. | |
| Уровень умножения умножает входы от нескольких нейронных сетевых уровней по элементам. | |
| Слой конкатенации глубины принимает входные данные одинаковой высоты и ширины и объединяет их вдоль третьего размера (размера канала). | |
| Слой конкатенации принимает входные данные и выполняет их конкатенацию вдоль заданного размера. Входные данные должны иметь одинаковый размер во всех размерах, кроме размера конкатенации. |
Если функции прямого уровня полностью поддерживают dlarray объекты, то слой совместим с GPU. В противном случае, чтобы быть совместимым с GPU, функции уровня должны поддерживать входы и обратные выходы типа gpuArray(Панель инструментов параллельных вычислений).
Поддержка многих встроенных функций MATLAB ® gpuArray(Панель инструментов параллельных вычислений) и dlarray входные аргументы. Список функций, поддерживающих dlarray см. Список функций с поддержкой dlarray. Список функций, выполняемых на графическом процессоре, см. в разделе Выполнение функций MATLAB на графическом процессоре (панель инструментов параллельных вычислений). Чтобы использовать графический процессор для глубокого обучения, необходимо также иметь поддерживаемое устройство графического процессора. Сведения о поддерживаемых устройствах см. в разделе Поддержка графического процессора по выпуску (Parallel Computing Toolbox). Дополнительные сведения о работе с графическими процессорами в MATLAB см. в разделе Вычисления графического процессора в MATLAB (Parallel Computing Toolbox).
analyzeNetwork | checkLayer | dlnetwork | trainingOptions | trainNetwork