Вычисление градиентов для пользовательских циклов обучения с помощью автоматической дифференциации
Использовать 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 как это обычно быстрее и требует меньше памяти.