AcceleratedFunction
加速深度学习功能
描述
一个AcceleratedFunction
存储基础函数的跟踪
重用缓存的跟踪依赖于函数的输入和输出:
对于任何
dlarray
物体或结构dlarray
对象输入时,跟踪取决于对象的大小、格式和底层数据类型dlarray
.也就是说,加速函数触发一个新的跟踪dlarray
缓存中不包含具有大小、格式或底层数据类型的输入。任何dlarray
与以前缓存的跟踪仅值不同的输入不会触发新的跟踪。对于任何
dlnetwork
的大小、格式和底层数据类型dlnetwork
状态和可学习参数。也就是说,加速函数触发一个新的跟踪dlnetwork
具有可学习参数或状态的输入,其大小、格式和底层数据类型不包含在缓存中。任何dlnetwork
输入只与先前缓存的跟踪的状态值和可学习参数不同,不会触发新的跟踪。对于其他类型的输入,跟踪取决于输入的值。也就是说,加速函数对缓存中不包含值的其他类型的输入触发新的跟踪。与以前缓存的跟踪值相同的任何其他输入都不会触发新的跟踪。
跟踪取决于函数输出的数量。也就是说,加速函数使用以前看不到的输出参数数量触发对函数调用的新的跟踪。与先前缓存的跟踪具有相同数量输出参数的任何函数调用都不会触发新的跟踪。
在必要时,软件通过计算底层函数并将结果跟踪缓存到AcceleratedFunction
对象。
返回的AcceleratedFunction
对象缓存对底层函数调用的跟踪,并在再次出现相同的输入模式时重用缓存的结果。
试着用dlaccelerate
对于这样的函数调用:
是长时间运行的
有
dlarray
的对象、结构dlarray
对象,或dlnetwork
对象作为输入是否有写入文件或显示输出等副作用
像调用底层函数一样调用加速函数。注意,加速函数不是函数句柄。
请注意
当使用dlfeval
功能,软件自动加速向前
而且预测
功能dlnetwork
输入。如果你加速一个深度学习函数,其中大部分计算发生在调用向前
或预测
功能dlnetwork
输入,那么你可能看不到训练时间的改善。
谨慎
一个AcceleratedFunction
对象不知道对底层函数的更新。如果修改与加速函数关联的函数,则使用clearCache
对象函数,或者使用命令明确的功能
.
创建
创建一个AcceleratedFunction
对象,则使用dlaccelerate
函数。
属性
函数
- - - - - -底层函数
函数处理
此属性是只读的。
底层函数,指定为函数句柄。
数据类型:function_handle
启用
- - - - - -启用跟踪的标志
真正的
(默认)|假
标志以启用跟踪,指定为真正的
或假
.
数据类型:逻辑
CacheSize
- - - - - -缓存的大小
50(默认)|正整数
缓存大小,指定为正整数。
缓存大小对应于要缓存的输入和输出组合的最大数量。
数据类型:双
HitRate
- - - - - -缓存命中率
[0,100]范围内的标量
此属性是只读的。
缓存命中率,指定为范围[0,100]中的标量。
缓存命中率对应于重用计算的百分比。
数据类型:双
入住率
- - - - - -缓存占用
[0,100]范围内的标量
此属性是只读的。
缓存占用率,指定为范围[0,100]中的一个标量。
缓存占用率对应于正在使用的缓存的百分比。
数据类型:双
CheckMode
- - - - - -检查模式
“没有”
(默认)|“宽容”
检查模式,指定为以下之一:
“没有”
-不要检查加速结果。“宽容”
检查加速结果和基础函数的结果是否在给定的公差范围内CheckTolerance
财产。如果值不在此容忍范围内,则函数抛出警告。
CheckTolerance
- - - - - -检查公差
1的军医
(默认)|积极的标量
校验公差,指定为正标量。
如果CheckMode
属性是“宽容”
,则该函数检查加速结果和基础函数的结果是否在给定的公差范围内CheckTolerance
财产。如果值不在此容忍范围内,则函数抛出警告。
数据类型:双
对象的功能
clearCache |
清晰加速深度学习功能跟踪缓存 |
例子
加速模型梯度函数
加载dlnetwork
对象和类的名称dlnetDigits.mat
.
S =负载“dlnetDigits.mat”);Net = s.net;classNames = s.classNames;
加速模型损失函数modelLoss
在示例的末尾列出。
fun = @modelLoss;Accfun = dlaccelerate(fun);
方法清除以前缓存的加速函数的任何跟踪clearCache
函数。
clearCache (accfun)
查看加速函数的性质。因为缓存是空的,所以入住率
属性为0。
accfun
accfun =带有属性的AcceleratedFunction: Function: @modelLoss Enabled: 1 CacheSize: 50 HitRate: 0 Occupancy: 0 CheckMode: 'none' CheckTolerance: 1.0000e-04
返回的AcceleratedFunction
对象存储底层函数调用的跟踪,并在重复出现相同的输入模式时重用缓存的结果。要在自定义训练循环中使用加速函数,请将对模型梯度函数的调用替换为对加速函数的调用。可以像调用底层函数一样调用加速函数。注意,加速函数不是函数句柄。
随机数据下的加速模型梯度函数dlfeval
函数。
X =兰特(28,28,1,128,“单身”);X = dlarray(X,“SSCB”);T = categorical(classNames(randi(10,[128 1])));T = onehotencode(T,2)';T = dlarray(T,“CB”);[loss,gradient,state] = dlfeval(accfun,net,X,T);
查看入住率
加速函数的性质。因为函数已经求值,所以缓存是非空的。
accfun。入住率
Ans = 2
模型损失函数
的modelLoss
函数取adlnetwork
对象网
,一个小批量的输入数据X
具有相应的目标标签T
并返回损失,损失相对于可学习参数的梯度网
、网络状态。要计算梯度,请使用dlgradient
函数。
函数[loss,gradient,state] = modelLoss(net,X,T) [Y,state] = forward(net,X);损耗=交叉熵(Y,T);gradients = dlgradient(loss,net.Learnables);结束
清除加速函数的缓存
加载dlnetwork
对象和类的名称dlnetDigits.mat
.
S =负载“dlnetDigits.mat”);Net = s.net;classNames = s.classNames;
加速模型损失函数modelLoss
在示例的末尾列出。
fun = @modelLoss;Accfun = dlaccelerate(fun);
方法清除以前缓存的加速函数的任何跟踪clearCache
函数。
clearCache (accfun)
查看加速函数的性质。因为缓存是空的,所以入住率
属性为0。
accfun
accfun =带有属性的AcceleratedFunction: Function: @modelLoss Enabled: 1 CacheSize: 50 HitRate: 0 Occupancy: 0 CheckMode: 'none' CheckTolerance: 1.0000e-04
返回的AcceleratedFunction
对象存储底层函数调用的跟踪,并在重复出现相同的输入模式时重用缓存的结果。要在自定义训练循环中使用加速函数,请将对模型梯度函数的调用替换为对加速函数的调用。可以像调用底层函数一样调用加速函数。注意,加速函数不是函数句柄。
随机数据下的加速模型梯度函数dlfeval
函数。
X =兰特(28,28,1,128,“单身”);X = dlarray(X,“SSCB”);T = categorical(classNames(randi(10,[128 1])));T = onehotencode(T,2)';T = dlarray(T,“CB”);[loss,gradient,state] = dlfeval(accfun,net,X,T);
查看入住率
加速函数的性质。因为函数已经求值,所以缓存是非空的。
accfun。入住率
Ans = 2
方法清除缓存clearCache
函数。
clearCache (accfun)
查看入住率
加速函数的性质。因为缓存已被清除,所以缓存为空。
accfun。入住率
Ans = 0
模型损失函数
的modelLoss
函数取adlnetwork
对象网
,一个小批量的输入数据X
具有相应的目标标签T
并返回损失,损失相对于可学习参数的梯度网
、网络状态。要计算梯度,请使用dlgradient
函数。
函数[loss,gradient,state] = modelLoss(net,X,T) [Y,state] = forward(net,X);损耗=交叉熵(Y,T);gradients = dlgradient(loss,net.Learnables);结束
检查加速深度学习函数输出
这个例子展示了如何检查加速函数的输出是否与基础函数的输出匹配。
在某些情况下,加速函数的输出与基础函数的输出不同。例如,在加速使用随机数生成的函数时必须小心,例如在网络输入中添加产生随机噪声的函数。当缓存生成非随机数的函数的跟踪时dlarray
对象时,加速函数将在跟踪中缓存产生的随机数。在重用跟踪时,加速函数使用缓存的随机值。加速函数不会产生新的随机值。
要检查加速函数的输出是否与基础函数的输出匹配,请使用CheckMode
加速函数的性质。当CheckMode
加速函数的性质是“宽容”
如果输出的差异超过指定的公差,则加速函数抛出警告。
加速函数myUnsupportedFun
的示例末尾列出了dlaccelerate
函数。这个函数myUnsupportedFun
产生随机噪声并将其添加到输入。此函数不支持加速,因为该函数生成不支持加速的随机数dlarray
对象。
accfun = dlaccelerate(@myUnsupportedFun)
函数:@myUnsupportedFun启用:1 CacheSize: 50 HitRate: 0占用率:0 CheckMode: 'none' CheckTolerance: 1.0000e-04
方法清除以前缓存的任何跟踪clearCache
函数。
clearCache (accfun)
要检查重用的缓存跟踪的输出是否与基础函数的输出匹配,请设置CheckMode
财产“宽容”
.
accfun。CheckMode =“宽容”
函数:@myUnsupportedFun启用:1 CacheSize: 50 HitRate: 0占用率:0 CheckMode: 'tolerance' CheckTolerance: 1.0000e-04
用一个1数组作为输入计算加速函数,指定为adlarray
输入。
dlX = darray (ones(3,3));dlY = accfun(dlX)
dlY = 3×3 dlarray 1.8147 1.9134 1.2785 1.9058 1.6324 1.5469 1.1270 1.0975 1.9575
用相同的输入再次计算加速函数。因为加速函数重用缓存的随机噪声值,而不是生成新的随机值,因此重用跟踪的输出与底层函数的输出不同。当CheckMode
加速函数的性质是“宽容”
当输出不同时,加速函数抛出警告。
dlY = accfun(dlX)
警告:加速输出与底层函数输出不同。
dlY = 3×3 dlarray 1.8147 1.9134 1.2785 1.9058 1.6324 1.5469 1.1270 1.0975 1.9575
随机数生成使用“喜欢”
选择兰德
函数dlarray
对象支持加速。若要在加速函数中使用随机数生成,请确保该函数使用兰德
函数“喜欢”
选项设置为已跟踪dlarray
对象(一个dlarray
对象,它依赖于输入dlarray
对象)。
加速函数mySupportedFun
,列在示例的末尾。这个函数mySupportedFun
方法生成噪声,从而向输入添加噪声“喜欢”
选项,该选项带有dlarray
对象。
accfun2 = dlaccelerate(@mySupportedFun);
方法清除以前缓存的任何跟踪clearCache
函数。
clearCache (accfun2)
要检查重用的缓存跟踪的输出是否与基础函数的输出匹配,请设置CheckMode
财产“宽容”
.
accfun2。CheckMode =“宽容”;
用相同的输入计算加速函数两次。因为重用缓存的输出与底层函数的输出匹配,所以加速函数不会抛出警告。
dlY = accfun2(dlX)
dlY = 3×3 dlarray 1.7922 1.0357 1.6787 1.9595 1.8491 1.7577 1.6557 1.9340 1.7431
dlY = accfun2(dlX)
dlY = 3×3 dlarray 1.3922 1.7060 1.0462 1.6555 1.0318 1.0971 1.1712 1.2769 1.8235
检查输出匹配需要额外的处理,并增加了函数求值所需的时间。检查输出后,设置CheckMode
财产“没有”
.
accfun1。CheckMode =“没有”;accfun2。CheckMode =“没有”;
例子函数
这个函数myUnsupportedFun
产生随机噪声并将其添加到输入。此函数不支持加速,因为该函数生成不支持加速的随机数dlarray
对象。
函数out = myUnsupportedFun(dlX) sz = size(dlX);噪声= rand(sz);out = dlX +噪声;结束
这个函数mySupportedFun
方法生成噪声,从而向输入添加噪声“喜欢”
选项,该选项带有dlarray
对象。
函数out = mySupportedFun(dlX) sz = size(dlX);噪声= rand(sz,“喜欢”dlX);out = dlX +噪声;结束
版本历史
在R2021a中引入
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入命令来运行该命令。Web浏览器不支持MATLAB命令。
您也可以从以下列表中选择网站:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳的网站表现。其他MathWorks国家网站没有针对从您的位置访问进行优化。