Чтобы создать пользовательский слой, который сам определяет график слоев, можно задать 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.
В этом списке показаны встроенные слои, которые полностью поддерживают состав сети.
Слой | Описание |
---|---|
Входной слой изображений вводит 2-D изображения в сеть и применяет нормализацию данных. | |
A входного слоя 3-D изображения вводит 3-D изображения или объемы в сеть и применяет нормализацию данных. | |
Входной слой последовательности вводит данные последовательности в сеть. | |
Входной слой функций вводит данные функций в сеть и применяет нормализацию данных. Используйте этот слой, когда у вас есть набор данных из числовых скаляров, представляющих функции (данные без пространственных или временных размерностей). |
Слой | Описание |
---|---|
Сверточный слой 2-D применяет сверточные фильтры скольжения к входу. | |
Сверточный слой 3-D применяет скользящие кубоидные фильтры свертки к трехмерному входу. | |
Сгруппированный 2-D сверточный слой разделяет входные каналы на группы и применяет скользящие сверточные фильтры. Используйте сгруппированные сверточные слои для разделяемой по каналу (также известной как разделяемая по глубине) свертки. | |
Транспонированный 2-D слой свертки преобразует функции. | |
Транспонированный 3-D слой свертки повышает качество трехмерных карт функций. | |
A полносвязного слоя умножает вход на весовую матрицу и затем добавляет вектор смещения. |
Слой | Описание |
---|---|
Слой ReLU выполняет операцию порога каждому элементу входа, где любое значение, меньше нуля, устанавливается в ноль. | |
Утечный слой ReLU выполняет операцию порога, где любое значение входа, меньше нуля, умножается на фиксированный скаляр. | |
Обрезанный слой ReLU выполняет операцию порога, где любое входное значение, меньше нуля, устанавливается равным нулю, а любое значение над усечением устанавливается равным этому усечению. | |
Слой активации ELU выполняет операцию тождеств на положительных входах и экспоненциальную нелинейность на отрицательных входах. | |
Слой активации качания применяет функцию качания к входам слоя. | |
Слой активации гиперболического тангенса (tanh) применяет функцию tanh к входам слоя. | |
Слой softmax применяет функцию softmax к входу. |
Слой | Описание |
---|---|
Слой нормализации группы нормализует мини-пакет данных между сгруппированными подмножествами каналов для каждого наблюдения независимо. Чтобы ускорить обучение сверточной нейронной сети и уменьшить чувствительность к инициализации сети, используйте слои нормализации группы между сверточными слоями и нелинейностями, такими как слои ReLU. | |
Слой нормализации слоя нормализует мини-пакет данных по всем каналам для каждого наблюдения независимо. Чтобы ускорить обучение рецидивирующих и многослойных нейронных сетей перцептрона и уменьшить чувствительность к инициализации сети, используйте слои нормализации уровня после обучаемых слоев, таких как LSTM и полносвязные слои. | |
Слой нормализации локального отклика (перекрестного канала) канала выполняет нормализацию канала. | |
Выпадающий слой случайным образом устанавливает элементы входа для нуля с заданной вероятностью. | |
Слой обрезки 2-D применяется 2-D обрезки к входу. |
Слой | Описание |
---|---|
Средний слой объединения выполняет понижающую дискретизацию, разделяя вход на прямоугольные области объединения и вычисляя средние значения каждой области. | |
Средний по 3-D слой объединения выполняет понижающую дискретизацию, деля трехмерный вход на кубоидные области объединения и вычисляя средние значения каждой области. | |
Глобальный средний слой объединения выполняет понижающую дискретизацию, вычисляя среднее значение размерностей высоты и ширины входа. | |
Слой 3-D глобального среднего объединения выполняет понижающую дискретизацию, вычисляя среднее значение высоты, ширины и размерностей глубины входа. | |
Максимальный слой объединения выполняет понижающую дискретизацию, разделяя вход на прямоугольные области объединения и вычисляя максимальное значение каждой области. | |
Слой объединения 3-D max выполняет понижающую дискретизацию, деля трехмерный вход на кубоидные области объединения и вычисляя максимум каждой области. | |
Глобальный слой максимального объединения выполняет понижающую дискретизацию, вычисляя максимальные размерности высоты и ширины входа. | |
Слой 3-D глобального максимального объединения выполняет понижающую дискретизацию, вычисляя максимальное значение высоты, ширины и размерностей глубины входа. | |
Максимальный слой отмены охлаждения отменяет восстановление выхода максимального слоя объединения. |
Слой | Описание |
---|---|
Слой сложения добавляет входов из нескольких слоев нейронной сети поэлементно. | |
Слой умножения умножает входы от нескольких нейронных слоев сети поэлементных. | |
Слой конкатенации глубин принимает входы, которые имеют ту же высоту и ширину и конкатенирует их вдоль третьей размерности (размерность канала). | |
Слой конкатенации принимает входы и конкатенирует их вдоль заданного измерения. Входы должны иметь одинаковый размер во всех размерностях, кроме размерности конкатенации. |
Если функции слоя 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).
analyzeNetwork
| checkLayer
| dlnetwork
| trainingOptions
| trainNetwork