使用自动微分为自定义训练循环计算梯度
使用dlgradient
使用自定义训练循环的自动微分来计算导数。
提示
对于大多数深度学习任务,您可以使用预先训练的网络,并使其适应您自己的数据。有关如何使用迁移学习来重新训练卷积神经网络来对一组新图像进行分类的示例,请参见训练深度学习网络对新图像进行分类.或者,您可以使用从头开始创建和培训网络layerGraph
的对象trainNetwork
和trainingOptions
功能。
如果trainingOptions
函数不提供任务所需的训练选项,则可以使用自动区分创建自定义训练循环。想要了解更多,请看为自定义训练循环定义深度学习网络.
[
返回的梯度dydx1,…,dydxk
) = dlgradient (y
,x1,…,xk
)y
关于变量x1
通过xk
.
调用dlgradient
从函数内部传递给dlfeval
.看到使用自动微分计算梯度和在深度学习工具箱中使用自动区分.
[
返回渐变并使用一个或多个名称-值对指定其他选项。例如,dydx1,…,dydxk
) = dlgradient (y
,x1,…,xk
,名称,值
)就要= dlgradient (y, x, RetainData,真的)
使梯度保留中间值以供后续重用dlgradient
调用。这种语法可以节省时间,但会占用更多内存。有关更多信息,请参见提示.
的dlgradient
函数在使用时不支持计算高阶导数金宝appdlnetwork
对象,该对象包含带有自定义向后函数的自定义层。
的dlgradient
函数在使用时不支持计算高阶导数金宝appdlnetwork
对象包含以下层:
gruLayer
lstmLayer
bilstmLayer
的dlgradient
函数不支持计算依赖于以下函数的高阶导金宝app数:
格勒乌
lstm
嵌入
刺激
interp1
一个dlgradient
调用必须在函数内部。要获得梯度的数值,必须使用dlfeval
,函数的实参必须是dlarray
.看到在深度学习工具箱中使用自动区分.
要正确评估梯度,请使用y
参数必须仅使用支持的函数金宝appdlarray
.看到支持dlarray的函数列表金宝app.
如果你设置“RetainData”
的名称-值对参数真正的
,该软件将在dlfeval
函数调用,而不是在导数计算之后立即删除跟踪。这种保存可能导致后续的dlgradient
在同一范围内调用dlfeval
调用的执行速度更快,但使用的内存更多。例如,在训练一个对抗网络时“RetainData”
设置是有用的,因为两个网络在训练期间共享数据和功能。看到训练生成对抗网络(GAN).
当你只需要计算一阶导数时,确保“EnableHigherDerivatives”
选择是假
因为这通常更快,需要更少的内存。
复杂梯度计算使用Wirtinger导数。梯度定义为函数实部的递增方向,以求导。这是因为微分的变量——例如损失——必须是实数,即使函数是复杂的。