exponenta event banner

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
    

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

    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
    

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

    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 объект (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
    Представлен в R2021a