Проверяйте выходы ускоренного глубокого обучения

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

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

См. также

| | | | |

Похожие темы