dlgradient
使用自动区分计算自定义训练循环的梯度
描述
使用dlgradient
使用自定义训练循环的自动微分计算导数。
提示
对于大多数深度学习任务,你可以使用预先训练好的网络,并使其适应你自己的数据。有关演示如何使用迁移学习重新训练卷积神经网络来对一组新图像进行分类的示例,请参见训练深度学习网络对新图像进行分类.或者,您可以从头创建和训练网络layerGraph
对象具有trainNetwork
而且trainingOptions
功能。
如果trainingOptions
函数没有为您的任务提供所需的训练选项,那么您可以使用自动区分创建自定义训练循环。要了解更多信息,请参见为自定义训练循环定义深度学习网络.
[
的渐变dydx1,…,dydxk
] = dlgradient(y
,x1,…,xk
)y
关于变量x1
通过xk
.
调用dlgradient
从传递给的函数内部dlfeval
.看到使用自动分化计算梯度而且在深度学习工具箱中使用自动区分.
[
返回渐变并使用一个或多个名称-值对指定其他选项。例如,dydx1,…,dydxk
] = dlgradient(y
,x1,…,xk
,名称,值
)dydx = dlgradient(y,x,'RetainData',true)
使梯度保留中间值,以便在后续中重用dlgradient
调用。这种语法可以节省时间,但会占用更多内存。有关更多信息,请参见提示.
例子
输入参数
输出参数
限制
的
dlgradient
函数在使用时不支持计算高阶导数万博1manbetxdlnetwork
包含具有自定义向后函数的自定义层的对象。的
dlgradient
函数在使用时不支持计算高阶导数万博1manbetxdlnetwork
包含以下层的对象:gruLayer
lstmLayer
bilstmLayer
的
dlgradient
函数不支持计算依赖于以下函数的高阶导万博1manbetx数:格勒乌
lstm
嵌入
刺激
interp1
更多关于
提示
一个
dlgradient
调用必须在函数内部。若要获得梯度的数值,必须使用dlfeval
,函数的实参必须是adlarray
.看到在深度学习工具箱中使用自动区分.为了能够正确地评估渐变,
y
参数必须仅使用for支持的函数万博1manbetxdlarray
.看到支持dlarray的函数列表万博1manbetx.如果你设置
“RetainData”
到的名称-值对参数真正的
时,软件保留跟踪dlfeval
函数调用,而不是在导数计算后立即擦除轨迹。这种保存会导致后续的dlgradient
在同一时间内调用dlfeval
调用的执行速度更快,但会使用更多内存。例如,在训练对抗网络时“RetainData”
设置是有用的,因为两个网络在训练过程中共享数据和功能。看到训练生成对抗网络(GAN).当您只需要计算一阶导数时,请确保
“EnableHigherDerivatives”
选择是假
因为这通常更快,需要更少的内存。复梯度是用维廷格导数计算的。梯度定义在函数的实部的增加方向上求导。这是因为要微分的变量——例如损失——必须是实数,即使函数很复杂。
扩展功能
版本历史
R2019b引入