Вычисление градиентов для пользовательских циклов обучения с помощью автоматической дифференциации
Использовать dlgradient
вычислить производные с помощью автоматической дифференциации для пользовательских циклов обучения.
Совет
Для большинства задач глубокого обучения можно использовать предварительно обученную сеть и адаптировать ее к собственным данным. Для примера, показывающего, как использовать передачу обучения для переобучения сверточной нейронной сети для классификации нового набора изображений, смотрите Train Нейронной сети для глубокого обучения для классификации новых изображений. Также можно создавать и обучать сети с нуля, используя 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
вызовы. Этот синтаксис может сэкономить время, но использует больше памяти. Для получения дополнительной информации см. советы».
dlgraident
функция не поддерживает вычисление производных более высокого порядка при использовании dlnetwork
объекты, содержащие пользовательские слои с пользовательской функцией назад.
dlgraident
функция не поддерживает вычисление производных более высокого порядка при использовании 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'
настройка полезна, потому что две сети совместно используют данные и функции во время обучения. См. «Train генеративной состязательной сети» (GAN).
Когда вам нужно вычислить только производные первого порядка, убедитесь, что 'EnableHigherDerivatives'
опция false
как это обычно быстрее и требует меньше памяти.