Чтобы создать пользовательский слой, который сам определяет график слоев, можно задать 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