Проверяйте ускоренную функцию глубокого обучения Выходные параметры

В этом примере показано, как проверять, что выходные параметры ускоренных функций совпадают с выходными параметрами базовой функции.

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

Смотрите также

| | | | |

Похожие темы