В этом примере показано, как проверить соответствие выходов ускоренных функций выходам базовой функции.
В некоторых случаях выходы ускоренных функций отличаются от выходов основной функции. Например, необходимо соблюдать осторожность при ускорении функций, использующих генерацию случайных чисел, таких как функция, генерирующая случайный шум для добавления к сетевому входу. При кэшировании трассировки функции, генерирующей случайные числа, которые не являются 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 объект (a 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