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.

    Типы данных: логический

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

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

    Типы данных: 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
    
    

    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
    Введенный в R2021a