В этом примере показано, как проверить, что выходы ускоренных функций совпадают с выходами базовой функции.
В некоторых случаях выходы ускоренных функций отличаются от выходов базовой функции. Например, вы должны позаботиться об ускорении функций, которые используют генерацию случайных чисел, таких как функция, которая генерирует случайный шум, чтобы добавить к входу сети. При кэшировании трассировки функции, которая генерирует случайные числа, которые не 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
Очистить все ранее кэшированные трассировки с помощью 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);
Очистить все ранее кэшированные трассировки с помощью 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
AcceleratedFunction
| clearCache
| dlaccelerate
| dlarray
| dlfeval
| dlgradient