主要内容

自定义层加速度函数

如果你不指定一个向后函数定义一个自定义层时,然后使用自动软件自动确定渐变分化。

当你训练一个网络与自定义层没有后退功能,软件每个输入痕迹dlarray对象的自定义层转发功能来确定计算图用于自动分化。这种跟踪过程可能需要一些时间,可以最后再计算相同的痕迹。通过优化、缓存和重用的痕迹,可以加速梯度计算当培训网络。软件也可以重用这些痕迹加快网络训练后的预测。

跟踪取决于大小,格式,和底层数据层的输入类型。即层触发一个新的跟踪输入大小,格式,或基础数据类型不包含在缓存中。输入不同的价值只有通过先前缓存的任何痕迹不引发一个新的跟踪。

表明支持自定义层加速度,也继承了万博1manbetxnnet.layer.Acceleratable类在定义自定义层。当一个继承自定义层nnet.layer.Acceleratable传递数据时,软件会自动缓存痕迹通过dlnetwork对象。

例如,表明自定义层myLayer万博1manbetx支持加速,使用这种语法

classdefmyLayer < nnet.layer。层& nnet.layer.Acceleratable结束

加速度的考虑

因为缓存痕迹的本质,并不是所有的功能都支持加速度。万博1manbetx

缓存过程可以缓存值或代码结构,你可能期望改变,或者取决于外部因素。你必须照顾当加速自定义层:

  • 生成随机数。

  • 使用如果语句和循环和条件,取决于的值dlarray对象。

因为缓存过程需要额外的计算、加速会导致在某些情况下再运行代码。这种情况可能发生在软件花时间创建新的缓存经常得不到重用。例如,当您传递多个mini-batches不同的序列长度的函数,每个独特的软件触发一个新的跟踪序列长度。

当自定义层加速度导致经济放缓,您可以禁用加速通过移除Acceleratablemixin或禁用的加速度dlnetwork对象的功能预测向前通过设置加速度选项“没有”

函数随机数生成

加速时必须小心使用随机数生成函数,如函数生成随机噪声的输入。当软件缓存函数产生随机数的痕迹,不是dlarray缓存对象,软件生成的随机样本的痕迹。重用跟踪时,加速函数使用缓存的随机样本。加速功能不产生新的随机值。

随机数生成使用“喜欢”选择的兰德函数与一个dlarray对象支持加速度万博1manbetx。使用随机数生成的加速功能,确保使用的函数兰德函数与“喜欢”选项设置为追踪dlarray对象(一个dlarray对象,它取决于一个输入dlarray对象)。

例如,考虑以下层预测函数,添加随机噪声的输入。

函数Z =预测(层,X)深圳=大小(X);噪音=兰德(深圳);Z = X +噪声;结束

以确保兰德为每一个评估函数生成一个新值,使用“喜欢”选择与追踪dlarray对象X

函数Z =预测(层,X)深圳=大小(X);噪音=兰德(深圳,“喜欢”,X);Z = X +噪声;结束

功能与如果语句和循环

你必须注意当使用加速功能如果语句和循环。特别是,您可以得到意想不到的结果,当你加速功能如果语句或循环,产生不同的代码路径函数输入相同的大小和格式。

加速功能与如果语句或循环条件取决于函数的值输入或来自外部源的值(例如,随机数生成的结果)可能会导致意想不到的行为。当缓存一个新的跟踪加速功能,如果函数包含一个如果语句或循环,那么软件缓存所生成的代码路径的跟踪如果语句或循环条件,特定的痕迹。因为改变的价值dlarray输入不会引发新的跟踪,重用跟踪不同的值时,软件使用相同的缓存跟踪(包含相同的缓存代码路径),即使不同的值会导致一个不同的代码路径。

通常,包含加速功能如果语句或循环和条件,不依赖于函数的值输入或外部因素(例如,循环遍历元素数组中)不会导致意外行为。例如,因为大小的变化dlarray输入触发一个新的跟踪,当重用跟踪输入相同的大小、缓存的代码路径输入的大小保持一致,即使有差异值。

从缓存的代码路径,避免意想不到的行为如果语句,您可以重构你的代码,这样就决定了正确结果通过结合所有分支的结果和提取所需的解决方案。

例如,考虑这段代码。

如果tf Y = funcA (X);其他的Y = funcB (X);结束
支持加万博1manbetx速,你可以用下面的代码替换它的形式。
Y = tf * funcA (X) + ~ tf * funcB (X);
另外,要避免不必要的乘法操作,您还可以使用这个替代。
Y =猫(3,funcA (X) funcB (X));Y = Y (:,:, (tf - tf));
请注意,这些技术可能导致更长时间的运行代码,因为他们需要执行的代码用于两个分支如果声明。

dlode45不支持加速度时万博1manbetxGradientMode“直接”

软件不支持加速万博1manbetxdlode45函数时,GradientMode选择是“直接”。结果层输出可能返回意想不到的结果。加速调用的代码dlode45函数,设置GradientMode选项“伴随”

另请参阅

|

相关的话题