В этом примере показано, как проверять, что выходные параметры ускоренных функций совпадают с выходными параметрами базовой функции.
В некоторых случаях выходные параметры ускоренных функций отличаются к выходным параметрам базовой функции. Например, необходимо заботиться при ускорении функций, которые используют генерацию случайных чисел, такую как функция, которая генерирует случайный шум, чтобы добавить к сетевому входу. При кэшировании трассировки функции, которая генерирует случайные числа, которые не являются dlarray
объекты, ускоренные функциональные кэши, приводящие случайные числа к трассировке. При многократном использовании трассировки ускоренная функция использует кэшируемые случайные значения. Ускоренная функция не генерирует новые случайные значения.
Чтобы проверять, что выходные параметры ускоренной функции совпадают с выходными параметрами базовой функции, используйте CheckMode
свойство ускоренной функции. Когда CheckMode
свойством ускоренной функции является 'tolerance'
и выходные параметры отличаются больше, чем заданный допуск, ускоренная функция выдает предупреждение.
Ускорьте функциональный myUnsupportedFun
, перечисленный в конце примера с помощью dlaccelerate
функция. Функциональный myUnsupportedFun
генерирует случайный шум и добавляет его во вход. Эта функция не поддерживает ускорение, потому что функция генерирует случайные числа, которые не являются dlarray
объекты.
accfun = dlaccelerate(@myUnsupportedFun)
accfun = AcceleratedFunction with properties: Function: @myUnsupportedFun Enabled: 1 CacheSize: 50 HitRate: 0 Occupancy: 0 CheckMode: 'none' CheckTolerance: 1.0000e-04
Cleare любые ранее кэшируемые трассировки с помощью clearCache
функция.
clearCache(accfun)
Чтобы проверять, что выходные параметры снова использованных кэшируемых трассировок совпадают с выходными параметрами базовой функции, установите CheckMode
свойство к 'tolerance'
.
accfun.CheckMode = 'tolerance'
accfun = AcceleratedFunction with properties: Function: @myUnsupportedFun Enabled: 1 CacheSize: 50 HitRate: 0 Occupancy: 0 CheckMode: 'tolerance' CheckTolerance: 1.0000e-04
Выполните ускоренную функцию с массивом из единиц, как введено в виде dlarray
входной параметр.
dlX = dlarray(ones(3,3)); dlY = accfun(dlX)
dlY = 3x3 dlarray 1.8147 1.9134 1.2785 1.9058 1.6324 1.5469 1.1270 1.0975 1.9575
Выполните ускоренную функцию снова с тем же входом. Поскольку ускоренные функциональные повторные использования кэшируемые случайные шумовые значения вместо того, чтобы генерация новые случайные значения, выходные параметры снова использованной трассировки отличаются от выходных параметров базовой функции. Когда CheckMode
свойством ускоренной функции является 'tolerance'
и выходные параметры отличаются, ускоренная функция выдает предупреждение.
dlY = accfun(dlX)
Warning: Accelerated outputs differ from underlying function outputs.
dlY = 3x3 dlarray 1.8147 1.9134 1.2785 1.9058 1.6324 1.5469 1.1270 1.0975 1.9575
Генерация случайных чисел с помощью 'like'
опция rand
функция с dlarray
ускорение поддержки объектов. Чтобы использовать генерацию случайных чисел в ускоренной функции, гарантируйте, что функция использует rand
функция с 'like'
набор опции к прослеженному dlarray
объект (dlarray
объект, который зависит от входа dlarray
объект.
Ускорьте функциональный mySupportedFun
, перечисленный в конце примера. Функциональный mySupportedFun
добавляет шум к входу путем генерации шума с помощью 'like'
опция с прослеженным dlarray
объект.
accfun2 = dlaccelerate(@mySupportedFun);
Cleare любые ранее кэшируемые трассировки с помощью clearCache
функция.
clearCache(accfun2)
Чтобы проверять, что выходные параметры снова использованных кэшируемых трассировок совпадают с выходными параметрами базовой функции, установите CheckMode
свойство к 'tolerance'
.
accfun2.CheckMode = 'tolerance';
Выполните ускоренную функцию дважды с тем же входом как прежде. Поскольку выходные параметры снова использованного кэша совпадают с выходными параметрами базовой функции, ускоренная функция не выдает предупреждение.
dlY = accfun2(dlX)
dlY = 3x3 dlarray 1.7922 1.0357 1.6787 1.9595 1.8491 1.7577 1.6557 1.9340 1.7431
dlY = accfun2(dlX)
dlY = 3x3 dlarray 1.3922 1.7060 1.0462 1.6555 1.0318 1.0971 1.1712 1.2769 1.8235
Проверка выходного соответствия требует дополнительной обработки и увеличивает время, требуемое для вычисления функции. После проверки выходных параметров, набор CheckMode
свойство к 'none'
.
accfun1.CheckMode = 'none'; accfun2.CheckMode = 'none';
Функциональный myUnsupportedFun
генерирует случайный шум и добавляет его во вход. Эта функция не поддерживает ускорение, потому что функция генерирует случайные числа, которые не являются dlarray
объекты.
function out = myUnsupportedFun(dlX) sz = size(dlX); noise = rand(sz); out = dlX + noise; end
Функциональный mySupportedFun
добавляет шум к входу путем генерации шума с помощью 'like'
опция с прослеженным dlarray
объект.
function out = mySupportedFun(dlX) sz = size(dlX); noise = rand(sz,'like',dlX); out = dlX + noise; end
dlaccelerate
| AcceleratedFunction
| clearCache
| dlarray
| dlgradient
| dlfeval