coder.regenerateDeepLearningParameters

Регенерируйте файлы, содержащие сеть learnables, и утверждает параметры

    Описание

    networkFileNames = coder.regenerateDeepLearningParameters(net,parameterFiles) возвращает массив ячеек имен файлов, содержащих регенерированную сеть learnables, и утверждает параметры. coder.regenerateDeepLearningParameters регенерирует эти файлы на основе learnables и состояний входа SeriesNetwork или DAGNetworkсетевой объект.

    networkFileNames = coder.regenerateDeepLearningParameters(dlnet,parameterFiles)возвращает массив ячеек имен файлов, содержащих регенерированную сеть learnables, и утверждает параметры. coder.regenerateDeepLearningParameters регенерирует эти файлы на основе learnables и состояний входа dlnetwork объект.

    пример

    networkFileNames = coder.regenerateDeepLearningParameters(___,'NetworkName',networkName) задает имя класса C++, которое будет использоваться для сети в сгенерированном коде.

    Примеры

    свернуть все

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

    Напишите функцию точки входа в MATLAB® это:

    1. Использует coder.loadDeepLearningNetwork функционируйте, чтобы создать и настроить сетевой объект CNN. Для получения дополнительной информации смотрите Предварительно обученные сети Загрузки для Генерации кода.

    2. Вызовы predict (Deep Learning Toolbox), чтобы предсказать ответы.

    function out = mLayer(in,matFile)
    
    myNet = coder.loadDeepLearningNetwork(coder.const(matFile));
    
    out = predict(myNet,in); 
    

    Создайте простую сеть, которая требует входных изображений размера 4 5 3.

    inputSize = [4 5 3];
    im = dlarray(rand(inputSize, 'single'), 'SSCB');
    
    outSize = 6;
    layers = [
        imageInputLayer(inputSize,'Name','input','Normalization','none')
        convolution2dLayer([3 3], 5, 'Name', 'conv-1')
        batchNormalizationLayer('Name', 'batchNorm')
        reluLayer('Name','relu1')
        transposedConv2dLayer([2 2], 5, 'Name', 'transconv')
        convolution2dLayer([2 2], 5, 'Name', 'conv2')
        reluLayer('Name','relu2')
        fullyConnectedLayer(outSize, 'Name', 'fc3')
        ];
    

    Создайте инициализированный dlnetwork объект от графика слоев.

    rng(0);
    dlnet1 = dlnetwork(layers);
    save('trainedNet.mat', 'dlnet1');
    

    Чтобы задать параметры генерации кода для MKL-DNN, установите DeepLearningConfig свойство к coder.MklDNNConfig возразите, что вы создаете с coder.DeepLearningConfig

    cfg = coder.CodeConfig('mex');
    cfg.TargetLang = 'C++';
    cfg.DeepLearningConfig = coder.DeepLearningConfig('TargetLibrary', 'mkldnn')
    

    Запустите codegen команда. codegen команда генерирует CUDA® код от mLayers.m Функция точки входа MATLAB.

    cnnMatFile = fullfile(pwd, 'trainedNet.mat');
    inputArgs = {im, coder.Constant(cnnMatFile)};
    
    codegen -config cfg mLayers -args inputArgs -report
    

    Вызов предсказывает на входе, отображают и сравнивают результаты с MATLAB.

    out = mLayer_mex(im,cnnMatFile)
    out_MATLAB = mLayer(im,cnnMatFile)
    
    out1 = 
    
      6(C) x 1(B) single dlarray
    
       -0.0064
       -0.1422
       -0.0897
        0.2223
        0.0329
        0.0365
    
    
    out_MATLAB = 
    
      6(C) x 1(B) single dlarray
    
       -0.0064
       -0.1422
       -0.0897
        0.2223
        0.0329
        0.0365
    

    Повторно инициализируйте dlnetwork обновить learnables к различным значениям.

    rng(10);
    dlnet2 = dlnetwork(layers);
    save('trainedNet.mat', 'dlnet2');
    

    Используйте coder.regenerateDeepLearningParameters функция, чтобы регенерировать файлы смещения на основе нового learnables и состояний сети.

    codegenDir = fullfile(pwd, 'codegen/mex/mLayer');
    networkFileNames = (coder.regenerateDeepLearningParameters(dlnet2, codegenDir))'
    
    networkFileNames = 
    
      8×1 cell array
    
        {'cnn_trainedNet0_0_conv-1_b.bin'   }
        {'cnn_trainedNet0_0_conv-1_w.bin'   }
        {'cnn_trainedNet0_0_conv2_b.bin'    }
        {'cnn_trainedNet0_0_conv2_w.bin'    }
        {'cnn_trainedNet0_0_fc3_b.bin'      }
        {'cnn_trainedNet0_0_fc3_w.bin'      }
        {'cnn_trainedNet0_0_transconv_b.bin'}
        {'cnn_trainedNet0_0_transconv_w.bin'}
    

    Вызов предсказывает на входе, отображают и сравнивают результаты с MATLAB.

    clear mLayer_mex;
    outNew = mLayer_mex(im,cnnMatFile)
    outNew_MATLAB = mLayer(im,cnnMatFile)
    
    outNew = 
    
      6(C) x 1(B) single dlarray
    
        0.1408
       -0.0080
        0.0342
       -0.0065
        0.1843
        0.0799
    
    
    outNew_MATLAB = 
    
      6(C) x 1(B) single dlarray
    
        0.1408
       -0.0080
        0.0342
       -0.0065
        0.1843
        0.0799

    Входные параметры

    свернуть все

    Обучивший сеть используемый во время генерации кода в виде SeriesNetwork (Deep Learning Toolbox) или DAGNetwork Объект (Deep Learning Toolbox). Можно использовать предварительно обученную сеть (например, при помощи googlenet функция) или по образованию ваше собственное сетевое использование trainNetwork (Deep Learning Toolbox).

    Сеть для пользовательских учебных циклов используется во время генерации кода в виде dlnetwork Объект (Deep Learning Toolbox).

    Путь к папке, содержащей сгенерированные сетевые файлы информации о параметре.

    Во время генерации кода двоичные файлы создаются для слоев сетевыми параметрами. Например, файлы cnn_googlenet_conv*_w и cnn_googlenet_conv*_b соответствуйте весам и сместите параметры для FusedConvReLU слои в сети. По умолчанию генератор кода создает эти файлы в codegen папка.

    Имя класса C++ для сети в сгенерированном коде в виде вектора символов или строки.

    Выходные аргументы

    свернуть все

    Имена файлов регенерированной сети learnables и параметров состояний, возвращенных как массив ячеек.

    Ограничения

    Только сеть learnables и состояния могут быть обновлены при помощи coder.regenerateDeepLearningParameters функция. Для модификаций, которые не поддерживает генератор кода, выдано сообщение об ошибке. Например, использование coder.regenerateDeepLearningParameters после изменения масштабного коэффициента текучего слоя ReLU выдает следующее сообщение об ошибке, когда масштабным коэффициентом не является learnable сеть.

    Network architecture has been modified since the last code generation. Unable 
    to accommodate the provided network in the generated code. Regenerate code 
    for the provided network to reflect changes in the network. For more 
    information, see Limitations to Regenerating Network Parameters After Code Generation.
    
    Введенный в R2021b