主要内容GydF4y2Ba

使用自动差异化GydF4y2Ba深度学习工具箱GydF4y2Ba

使用自动分化进行定制培训和计算GydF4y2Ba

自动差异使得更容易创建自定义培训循环,自定义层和其他深度学习自定义。GydF4y2Ba

一般来说,定制深度学习训练最简单的方法是创建一个GydF4y2Badlnetwork.GydF4y2Ba.在网络中包含您想要的层。然后使用某种梯度下降在自定义循环中执行训练,其中梯度是目标函数的梯度。目标函数可以是分类误差、交叉熵或网络权值的任何其他相关标量函数。看到GydF4y2Ba支持dlarray的函数列表金宝appGydF4y2Ba.GydF4y2Ba

此示例是自定义训练循环的高级版本。这里,GydF4y2BaFGydF4y2Ba目标函数,如损失,和GydF4y2BaGGydF4y2Ba是目标函数相对于网络中权重的梯度GydF4y2Ba净GydF4y2Ba.这GydF4y2Ba更新GydF4y2Ba函数表示某种类型的梯度下降。GydF4y2Ba

%高级训练循环GydF4y2Ban = 1;GydF4y2Ba而GydF4y2Ba(n 结尾GydF4y2Ba

你叫GydF4y2Badlfeval.GydF4y2Ba计算目标和渐变的数值。要启用梯度的自动计算,数据GydF4y2BaDLX.GydF4y2Ba必须是A.GydF4y2Badlarray.GydF4y2Ba.GydF4y2Ba

dlX = dlarray (X);GydF4y2Ba

目标函数有GydF4y2BadlgradientGydF4y2Ba呼叫计算渐变。这GydF4y2BadlgradientGydF4y2Ba呼叫必须在函数的内部GydF4y2Badlfeval.GydF4y2Ba评估。GydF4y2Ba

函数GydF4y2Ba模型(f, g) =(净dlX T)GydF4y2Ba%计算目标使用支持的dlarray函数金宝appGydF4y2BaY =前进(NET,DLX);f = fcnvalue(y,t);GydF4y2Ba%联字段或类似GydF4y2Bag = dlgradient(f,net.learnables);GydF4y2Ba%自动梯度GydF4y2Ba结尾GydF4y2Ba

对于使用GydF4y2Badlnetwork.GydF4y2Ba用简单的GydF4y2Badlfeval.GydF4y2Ba-GydF4y2BadlgradientGydF4y2Ba-GydF4y2Badlarray.GydF4y2Ba语法,参见GydF4y2BaGrad-Cam揭示为什么深入学习决策GydF4y2Ba.有关使用自定义培训循环的更复杂示例,请参见GydF4y2Ba火车生成对抗网络(GaN)GydF4y2Ba.有关使用自动差异化的自定义培训的进一步详细信息,请参阅GydF4y2Ba定义自定义训练循环,损失函数和网络GydF4y2Ba.GydF4y2Ba

使用GydF4y2BadlgradientGydF4y2Ba和GydF4y2Badlfeval.GydF4y2Ba一起进行自动分化GydF4y2Ba

要使用自动差异,您必须致电GydF4y2BadlgradientGydF4y2Ba函数内部,并使用GydF4y2Badlfeval.GydF4y2Ba.表示对a求导的点GydF4y2Badlarray.GydF4y2Ba对象,管理数据结构并启用评估的追踪。例如,RosenBrock函数是优化的常见测试功能。GydF4y2Ba

函数GydF4y2Ba[f,grad] = rosenbrock(x)f = 100 *(x(2) -  x(1)。^ 2)。^ 2 +(1  -  x(1))。^ 2;Grad = Dlgradient(F,X);GydF4y2Ba结尾GydF4y2Ba

计算点处的Rosenbrock函数的值和梯度GydF4y2BaX0.GydF4y2Ba=[1, 2]。为了在Rosenbrock函数中实现自动区分,通过GydF4y2BaX0.GydF4y2Ba作为一个GydF4y2Badlarray.GydF4y2Ba.GydF4y2Ba

x0 = dlarray ([1, 2]);[fval, gradval] = dlfeval (x0 @rosenbrock)GydF4y2Ba
fval = 1x1 dlarray 104 gradval = 1x2 dlarray 396 200GydF4y2Ba

有关使用自动差异化的示例,请参阅GydF4y2BaGrad-Cam揭示为什么深入学习决策GydF4y2Ba.GydF4y2Ba

导数的跟踪GydF4y2Ba

数字地评估梯度,aGydF4y2Badlarray.GydF4y2Ba如上所述,构造用于反向模式差异的数据结构GydF4y2Ba自动差异化背景GydF4y2Ba.此数据结构是GydF4y2Ba跟踪GydF4y2Ba导数的计算。当使用自动微分和派生跟踪时,请记住以下准则:GydF4y2Ba

  • 不要介绍一个新的GydF4y2Badlarray.GydF4y2Ba在一个目标函数内计算并尝试对该对象进行微分。例如:GydF4y2Ba

    函数GydF4y2Ba[dy,dy1] =有趣(x1)x2 = dlarray(0);y = x1 + x2;dy = dlgradient(y,x2);GydF4y2Ba%错误:X2未经许可GydF4y2Bay₁= dlgradient (x1);GydF4y2Ba即使y有一个未跟踪的部分,也没有错误GydF4y2Ba结尾GydF4y2Ba
  • 不使用GydF4y2Ba提取数据GydF4y2Ba带着追查的论点。这样做打破了跟踪。例如:GydF4y2Ba

    Fun = @(x)dlgradient(x + atan(extractdata(x)),x);GydF4y2Ba由于领先的“X”术语,任何点的%梯度都是1。GydF4y2Badlfeval(有趣,dlarray (2.5))GydF4y2Ba
    ans = 1x1 dlarray 1GydF4y2Ba

    但是,你可以使用GydF4y2Ba提取数据GydF4y2Ba从因变量中引入新的自变量。GydF4y2Ba

  • 在并行工作时,客户端和工人之间移动跟踪的Dlarray对象会破坏跟踪。跟踪的Dlarray对象将保存在工作者上,并将客户端加载为未分配的DLARRAY对象。为避免并行工作时破坏跟踪,计算工作人员上的所有必需渐变,然后将客户端上的渐变组合在一起。例如,看到GydF4y2Ba列车网络与自定义培训循环平行GydF4y2Ba.GydF4y2Ba

  • 仅使用支持的功能。金宝app有关支持的功能列表,请参阅金宝appGydF4y2Ba支持dlarray的函数列表金宝appGydF4y2Ba.使用不受支持的函数金宝appGydF4y2BaFGydF4y2Ba,尝试实现GydF4y2BaFGydF4y2Ba使用支持的功金宝app能。GydF4y2Ba

自动衍生物的特点GydF4y2Ba

  • 您只能对标量值函数使用自动微分来计算梯度。中间计算可以有任意数量的变量,但最终的函数值必须是标量。如果你需要对一个向量值函数求导,每次只对一个分量求导。在本例中,考虑设置GydF4y2BadlgradientGydF4y2Ba'etaindata'GydF4y2Ba的名称-值对参数GydF4y2Ba真正的GydF4y2Ba.GydF4y2Ba

  • 打电话GydF4y2BadlgradientGydF4y2Ba评估特定点的衍生品。当没有理论值时,该软件通常对衍生物的值进行任意选择。例如,GydF4y2Ba雷GydF4y2Ba功能,GydF4y2Barelu (x) = max (x, 0)GydF4y2Ba,是不可微的GydF4y2Bax = 0GydF4y2Ba.然而,GydF4y2BadlgradientGydF4y2Ba返回衍生物的值。GydF4y2Ba

    x = dlarray(0);Y = DLFeval(@(t)dlgradient(Relu(T),T),x)GydF4y2Ba
    y = 1x1 dlarray 0GydF4y2Ba

    附近点的价值GydF4y2Baeps.GydF4y2Ba是不同的。GydF4y2Ba

    x = dlarray(eps);Y = DLFeval(@(t)dlgradient(Relu(T),T),x)GydF4y2Ba
    y = 1x1 dlarray 1GydF4y2Ba

也可以看看GydF4y2Ba

|GydF4y2Ba|GydF4y2Ba|GydF4y2Ba

相关的话题GydF4y2Ba