dlgradient

定制培训循环计算梯度使用自动分化

描述

dlgradient要计算衍生工具使用的定制培训循环自动分化。

小费

对于大多数深学习任务,你可以使用预训练网络,并使其适应自己的数据。有关说明如何使用传输学习再培训卷积神经网络,一组新的图片进行分类示例,请参见火车深学习网络分类新形象。或者,你可以创建和使用从头开始培训网络layerGraph与对象trainNetworktrainingOptions功能。

如果trainingOptions功能不提供培训选项,你需要为你的任务,那么你可以创建一个使用自动分化定制培训圈。要了解更多信息,请参阅定义自定义培训循环

[dydx1,...,dydxk] = dlgradient(ÿX1,...,XK返回的梯度ÿ关于变量X1通过XK

呼叫dlgradient从内部功能传递给dlfeval。看到梯度计算应用自动微分使用自动分化深度学习工具箱

[dydx1,...,dydxk] = dlgradient(ÿX1,...,XK'RetainData',真正)使梯度保留中间值用于随后的再使用dlgradient调用。这句法可以节省时间,但使用更多的内存。看到提示

例子

全部收缩

的ROSENBROCK的功能是优化标准的测试功能。该rosenbrock.m辅助函数计算功能值,并使用自动微分来计算其梯度。

类型rosenbrock.m
函数[Y,dydx] =的ROSENBROCK(X)Y = 100 *(X(2) -  X(1)^ 2)^ 2 +(1  -  X(1))^ 2。。。;dydx = dlgradient(Y,X);结束

要在点评估的ROSENBROCK的功能及其梯度[-1,2], 创建一个dlarray点,然后调用dlfeval在功能手柄@rosenbrock

X0 = dlarray([ -  1,2]);[FVAL,gradval] = dlfeval(@的ROSENBROCK,X0)
FVAL = 1×1 dlarray 104
gradval = 1×2 dlarray 396 200

可替换地,限定的ROSENBROCK的功能的两个输入的功能,X1和X2

类型rosenbrock2.m
函数[Y,dydx1,dydx2] = rosenbrock2(X1,X2)Y = 100 *(。X2  -  X1 ^ 2)^ 2 +(1  -  X1)^ 2。。。;[dydx1,dydx2] = dlgradient(Y,X1,X2);结束

呼叫dlfeval评估rosenbrock2dlarray表示的输入参数-12

X1 = dlarray(-1);X2 = dlarray(2);[FVAL,dydx1,dydx2] = dlfeval(@ rosenbrock2,X1,X2)
FVAL = 1×1 dlarray 104
dydx1 = 1×1 dlarray 396
dydx2 = 1×1 dlarray 200

剧情的Rosenbrock函数的梯度在单位正方形的几个点。首先,初始化表示评价点和函数的输出的阵列。

[X1 X2] = meshgrid(linspace(0,1,10));X1 = dlarray(X1(:));X2 = dlarray(X2(:));Y = dlarray(零(大小(X1)));DYDX1 = Y;DYDX2 = Y;

评估在一个循环的功能。绘制使用结果颤动

对于I = 1:长度(X1)[Y(i)中,DYDX1(i)中,DYDX2(I)] = dlfeval(@ rosenbrock2,X1(i)中,X 2(I));结束颤动(ExtractData由(X1),ExtractData由(X2),ExtractData由(DYDX1),ExtractData由(DYDX2))xlabel('X1')ylabel('X2'

输入参数

全部收缩

变量进行区分,指定为一个标量dlarray目的。对于分化,ÿ必须的追踪功能dlarray输入端(见究其根源,dlarray),并且必须包括所支持的功能万博1manbetxdlarray(看到与dlarray支持功能列表万博1manbetx)。

例:100 *(X(2) - X(1)^ 2)^ 2 +(1 - X(1))。^ 2

例:RELU(X)

变量中的功能,指定为dlarray对象,一个单元阵列,结构或表含有dlarray对象,或递归此类参数的任意组合。例如,参数可以是含有包含含有结构单元阵列的单元阵列dlarray对象。

如果您指定X1,...,XK作为一个表,该表必须包含以下变量:

  • - 图层名称,指定为字符串标量。

  • 参数- 参数名称,指定为字符串标量。

  • - 参数的值,指定为包含单元阵列的dlarray

例:dlarray([1 2 3 4])

数据类型:||合乎逻辑|结构|细胞

指示灯在函数调用期间保持跟踪数据,指定为要么真正。如果这个说法是, 一个dlarray丢弃计算衍生物后立即衍生物跟踪。如果这个说法是真正, 一个dlarray保留衍生物跟踪直到的所述端dlfeval函数调用,用于评估dlgradient。该真正设置是有用的,只有当dlfeval调用包含不止一个dlgradient呼叫。该真正设置使软件使用更多的内存,但可以节省时间多的时候dlgradient调用使用同一轨迹的至少一部分。

例:dydx = dlgradient(Y,X 'RetainData',真)

数据类型:合乎逻辑

输出参数

全部收缩

渐变,返回为dlarray对象,或者一个单元阵列,结构,或包含表dlarray对象,或递归此类参数的任意组合。的大小和数据类型dydx1,...,dydxk是相同的那些相关联的输入变量的X1,...,XK

更多关于

全部收缩

究其根源dlarray

在一个功能,一个的计算dlarray内部记录中所采取的步骤跟踪,使反向模式自动分化。跟踪内发生dlfeval呼叫。看到自动微分背景

提示

  • dlgradient不支持更高阶导数。万博1manbetx换句话说,你不能越过的输出dlgradient打电话到另一个dlgradient呼叫。

  • 一个dlgradient电话必须是一个函数里面。为了获得一个梯度的数值,必须使用评价功能dlfeval和函数参数必须是一个dlarray。看到使用自动分化深度学习工具箱

  • 为了使梯度,在正确评价ÿ参数必须使用仅支持的功能万博1manbetxdlarray。看到与dlarray支持功能列表万博1manbetx

  • 如果设置了'RetainData'名称 - 值对参数真正,软件蜜饯跟踪的时间dlfeval函数调用,而不是衍生计算后立即删除的痕迹。这种防护可能会导致后续dlgradient在同一个呼叫dlfeval打电话要执行速度更快,但会占用更多的内存。例如,在训练对抗性网络,所述'RetainData'因为两个网络训练过程中共享数据和功能设置非常有用。看到火车剖成对抗性网络(GAN)

介绍了在R2019b