Вычислите градиенты для пользовательских учебных циклов с помощью автоматического дифференцирования
Использование dlgradient
вычислить производные с помощью автоматического дифференцирования для пользовательских учебных циклов.
Совет
Для большинства задач глубокого обучения можно использовать предварительно обученную сеть и адаптировать ее к собственным данным. Для примера, показывающего, как использовать передачу обучения, чтобы переобучить сверточную нейронную сеть, чтобы классифицировать новый набор изображений, смотрите, Обучают Нейронную сеть для глубокого обучения Классифицировать Новые Изображения. В качестве альтернативы можно создать и обучить нейронные сети с нуля с помощью layerGraph
объекты с trainNetwork
и trainingOptions
функции.
Если trainingOptions
функция не обеспечивает опции обучения, в которых вы нуждаетесь для своей задачи, затем можно создать пользовательский учебный цикл с помощью автоматического дифференцирования. Чтобы узнать больше, смотрите, Задают Нейронную сеть для глубокого обучения для Пользовательских Учебных Циклов.
[
возвращает градиенты dydx1,...,dydxk
] = dlgradient(y
,x1,...,xk
)y
относительно переменных x1
через xk
.
Вызвать dlgradient
из функции, переданной dlfeval
. Смотрите вычисляют градиент Используя автоматическое дифференцирование и используют автоматическое дифференцирование в Deep Learning Toolbox.
[
возвращает градиенты и задает дополнительные опции с помощью одной или нескольких пар "имя-значение". Например, dydx1,...,dydxk
] = dlgradient(y
,x1,...,xk
,Name,Value
)dydx = dlgradient(y,x,'RetainData',true)
заставляет градиент сохранять промежуточные значения для повторного использования в последующем dlgradient
вызовы. Этот синтаксис может сэкономить время, но использует больше памяти. Для получения дополнительной информации смотрите Советы.
dlgradient
функция не поддерживает вычисление производных высшего порядка при использовании dlnetwork
объекты, содержащие пользовательские слои с пользовательской обратной функцией.
dlgradient
функция не поддерживает вычисление производных высшего порядка при использовании dlnetwork
объекты, содержащие следующие слои:
gruLayer
lstmLayer
bilstmLayer
dlgradient
функция не поддерживает вычисление производных высшего порядка, которые зависят от следующих функций:
gru
lstm
embed
prod
interp1
A dlgradient
вызов должен быть в функции. Чтобы получить числовое значение градиента, необходимо оценить функциональное использование dlfeval
, и аргументом к функции должен быть dlarray
. Смотрите использование автоматическое дифференцирование в Deep Learning Toolbox.
Включить правильную оценку градиентов, y
аргумент должен использовать только поддерживаемые функции для dlarray
. См. Список Функций с Поддержкой dlarray.
Если вы устанавливаете 'RetainData'
аргумент пары "имя-значение" true
, трассировка консервов программного обеспечения на время dlfeval
вызов функции вместо того, чтобы сразу стереть трассировку после производного расчета. Это сохранение может вызвать последующее dlgradient
вызовите в том же самом dlfeval
вызовите, чтобы быть выполненными быстрее, но использует больше памяти. Например, в обучении соперничающей сети, 'RetainData'
установка полезна, потому что эти две сети осуществляют обмен данными и функции во время обучения. Смотрите Обучают Порождающую соперничающую сеть (GAN).
Когда необходимо вычислить производные первого порядка только, гарантировать что 'EnableHigherDerivatives'
опцией является false
когда это обычно быстрее и требует меньшей памяти.
Комплексные градиенты вычисляются с помощью производной Wirtinger. Градиент задан в направлении увеличения действительной части функции, чтобы дифференцироваться. Это вызвано тем, что переменная, чтобы дифференцироваться — например, потеря — должна быть действительной, даже если функция является комплексной.