AcceleratedFunction

Ускоренная функция глубокого обучения

    Описание

    Система координат AcceleratedFunction хранит следы базовой функции

    Повторное использование кэшированного трассировки зависит от входных параметров функции и выходов:

    • Для любого dlarray объект или структура dlarray входы объекта, трассировка зависит от размера, формата и базового типа данных dlarray. То есть ускоренная функция запускает новую трассировку для dlarray входы с размером, форматом или базовым типом данных, не содержащимися в кэше. Любой dlarray входы, различающиеся только значением в ранее кэшированную трассировку, не запускают новую трассировку.

    • Для любого dlnetwork входы, трассировка зависит от размера, формата и базового типа данных dlnetwork состояние и настраиваемые параметры. То есть ускоренная функция запускает новую трассировку для dlnetwork Входы с настраиваемыми параметрами или состоянием с размером, форматом и базовым типом данных, не содержащимися в кэше. Любой dlnetwork входы, различающиеся только значением состояния и настраиваемых параметров в ранее кэшированную трассировку, не запускают новую трассировку.

    • Для других типов входов трассировка зависит от значений входов. То есть ускоренная функция запускает новую трассировку для других типов входов со значением, не содержащимся в кэше. Любые другие входы, имеющие то же значение, что и ранее кэшированная трассировка, не запускают новую трассировку.

    • Трассировка зависит от количества выходов функции. То есть ускоренная функция запускает новую трассировку для вызовов функций с ранее не видимыми номерами выходных аргументов. Любые вызовы функций с таким же количеством выходных аргументов, как и ранее кэшированная трассировка, не запускают новую трассировку.

    При необходимости программное обеспечение кэширует любые новые трассировки путем оценки базовой функции и кэширования полученного трассировки в AcceleratedFunction объект.

    Возвращенный AcceleratedFunction объект кэширует следы вызовов к базовой функции и повторно использует результат кэширования, когда тот же входной шаблон повторяется.

    Попробовать использовать dlaccelerate для вызовов функций, которые:

    • являются длительными

    • иметь dlarray объекты, структуры dlarray объекты, или dlnetwork объекты как входы

    • не имеют побочных эффектов, таких как запись в файлы или отображение выхода

    Активируйте ускоренную функцию, так как вы бы активировали базовую функцию. Обратите внимание, что ускоренная функция не является указателем на функцию.

    Примечание

    При использовании dlfeval функция, программное обеспечение автоматически ускоряет forward и predict функции для dlnetwork вход. Если вы ускоряете функцию глубокого обучения, где большинство расчетов происходит в вызовах forward или predict функции для dlnetwork вход, тогда вы можете не увидеть улучшения во времени обучения.

    Внимание

    Система координат AcceleratedFunction объекту не известно об обновлениях базовой функции. Если вы измените функцию, связанную с ускоренной функцией, то очистите кэш с помощью clearCache функция объекта или альтернативно используйте команду clear functions.

    Создание

    Как создать AcceleratedFunction объект, использовать dlaccelerate функция.

    Свойства

    расширить все

    Это свойство доступно только для чтения.

    Базовая функция, заданная как указатель на функцию.

    Типы данных: function_handle

    Флаг для включения трассировки, заданный как true или false.

    Типы данных: logical

    Размер кэша, заданный как положительное целое число.

    Размер кэша соответствует максимальному количеству входа и выхода комбинаций для кэша.

    Типы данных: double

    Это свойство доступно только для чтения.

    Частота попадания кэша, заданная как скаляр в области значений [0,100].

    Частота попадания в кэш соответствует проценту повторно используемых вычислений.

    Типы данных: double

    Это свойство доступно только для чтения.

    Заполнение кэша, заданное как скаляр в области значений [0,100].

    Заполнение кэша соответствует проценту используемого кэша.

    Типы данных: double

    Проверяйте режим, заданный как один из следующих:

    • 'none' - Не проверяйте ускоренные результаты.

    • 'tolerance' - Проверяйте, что ускоренные результаты и результаты базовой функции находятся в пределах допуска, заданного CheckTolerance свойство. Если значения не находятся в пределах этого допуска, функция выдает предупреждение.

    Проверяйте допуск, заданный как положительная скалярная величина.

    Если на CheckMode свойство 'tolerance'затем функция проверяет, что ускоренные результаты и результаты базовой функции находятся в пределах допуска, заданного CheckTolerance свойство. Если значения не находятся в пределах этого допуска, функция выдает предупреждение.

    Типы данных: double

    Функции объекта

    clearCacheОчистка кэша трассировки функции ускоренного глубокого обучения

    Примеры

    свернуть все

    Загрузите dlnetwork имена объектов и классов из файла MAT dlnetDigits.mat.

    s = load("dlnetDigits.mat");
    dlnet = s.dlnet;
    classNames = s.classNames;

    Ускорите функцию градиентов модели modelGradients приведенный в конце примера.

    fun = @modelGradients;
    accfun = dlaccelerate(fun);

    Очистите все ранее кэшированные трассировки ускоренной функции с помощью clearCache функция.

    clearCache(accfun)

    Просмотрите свойства ускоренной функции. Поскольку кэш пуст, Occupancy свойство равно 0.

    accfun
    accfun = 
      AcceleratedFunction with properties:
    
              Function: @modelGradients
               Enabled: 1
             CacheSize: 50
               HitRate: 0
             Occupancy: 0
             CheckMode: 'none'
        CheckTolerance: 1.0000e-04
    
    

    Возвращенный AcceleratedFunction объект хранит следы базовых вызовов функций и повторно использует результат кэширования, когда тот же входной шаблон повторяется. Чтобы использовать ускоренную функцию в пользовательском цикле обучения, замените вызовы функции градиентов модели на вызовы ускоренной функции. Можно вызвать ускоренную функцию, так как вы бы активировали базовую функцию. Обратите внимание, что ускоренная функция не является указателем на функцию.

    Оцените ускоренную функцию градиентов модели со случайными данными с помощью dlfeval функция.

    X = rand(28,28,1,128,'single');
    dlX = dlarray(X,'SSCB');
    
    T = categorical(classNames(randi(10,[128 1])));
    T = onehotencode(T,2)';
    dlT = dlarray(T,'CB');
    
    [gradients,state,loss] = dlfeval(accfun,dlnet,dlX,dlT);

    Просмотрите Occupancy свойство ускоренной функции. Поскольку функция была оценена, кэш не пуст.

    accfun.Occupancy
    ans = 2
    

    Функция градиентов модели

    The modelGradients функция принимает dlnetwork dlnet объектамини-пакет входных данных dlX с соответствующими целевыми метками dlT и возвращает градиенты потерь относительно настраиваемых параметров в dlnet, состояние сети и потери. Чтобы вычислить градиенты, используйте dlgradient функция.

    function [gradients,state,loss] = modelGradients(dlnet,dlX,dlT)
    
    [dlYPred,state] = forward(dlnet,dlX);
    loss = crossentropy(dlYPred,dlT);
    gradients = dlgradient(loss,dlnet.Learnables);
    
    end

    Загрузите dlnetwork имена объектов и классов из файла MAT dlnetDigits.mat.

    s = load("dlnetDigits.mat");
    dlnet = s.dlnet;
    classNames = s.classNames;

    Ускорите функцию градиентов модели modelGradients приведенный в конце примера.

    fun = @modelGradients;
    accfun = dlaccelerate(fun);

    Очистите все ранее кэшированные трассировки ускоренной функции с помощью clearCache функция.

    clearCache(accfun)

    Просмотрите свойства ускоренной функции. Поскольку кэш пуст, Occupancy свойство равно 0.

    accfun
    accfun = 
      AcceleratedFunction with properties:
    
              Function: @modelGradients
               Enabled: 1
             CacheSize: 50
               HitRate: 0
             Occupancy: 0
             CheckMode: 'none'
        CheckTolerance: 1.0000e-04
    
    

    Возвращенный AcceleratedFunction объект хранит следы базовых вызовов функций и повторно использует результат кэширования, когда тот же входной шаблон повторяется. Чтобы использовать ускоренную функцию в пользовательском цикле обучения, замените вызовы функции градиентов модели на вызовы ускоренной функции. Можно вызвать ускоренную функцию, так как вы бы активировали базовую функцию. Обратите внимание, что ускоренная функция не является указателем на функцию.

    Оцените ускоренную функцию градиентов модели со случайными данными с помощью dlfeval функция.

    X = rand(28,28,1,128,'single');
    dlX = dlarray(X,'SSCB');
    
    T = categorical(classNames(randi(10,[128 1])));
    T = onehotencode(T,2)';
    dlT = dlarray(T,'CB');
    
    [gradients,state,loss] = dlfeval(accfun,dlnet,dlX,dlT);

    Просмотрите Occupancy свойство ускоренной функции. Поскольку функция была оценена, кэш не пуст.

    accfun.Occupancy
    ans = 2
    

    Очистить кэш можно используя clearCache функция.

    clearCache(accfun)

    Просмотрите Occupancy свойство ускоренной функции. Поскольку кэш очищен, кэш пуст.

    accfun.Occupancy
    ans = 0
    

    Функция градиентов модели

    The modelGradients функция принимает dlnetwork dlnet объектамини-пакет входных данных dlX с соответствующими целевыми метками dlT и возвращает градиенты потерь относительно настраиваемых параметров в dlnet, состояние сети и потери. Чтобы вычислить градиенты, используйте dlgradient функция.

    function [gradients,state,loss] = modelGradients(dlnet,dlX,flT)
    
    [dlYPred,state] = forward(dlnet,dlX);
    loss = crossentropy(dlYPred,flT);
    gradients = dlgradient(loss,dlnet.Learnables);
    
    end

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

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