Main Content

为深度学习网络生成泛型 C/C++ 代码

使用 MATLAB® Coder™,您可以根据已经过训练的神经网络生成用于预测的泛型 C 或 C++ 代码。生成的 C/C++ 代码不依赖任何第三方库。生成的代码使用在输入 SeriesNetwork (Deep Learning Toolbox)DAGNetwork (Deep Learning Toolbox)dlnetwork (Deep Learning Toolbox) 网络对象中指定的架构、层和参数来实现神经网络。请参阅代码生成支持的网络和层

使用以下方法之一生成代码:

  • 从 MATLAB 代码生成 C/C++ 代码的标准 codegen 命令。

  • MATLAB Coder

要求

  • 在 Windows® 上,使用 codegen 函数为深度学习网络生成代码需要 Microsoft® Visual Studio® 或 MinGW® 编译器。

  • MATLAB Coder Interface for Deep Learning。要安装此支持包,请从 MATLAB 的附加功能菜单中选择它。

  • Deep Learning Toolbox™.

使用 codegen 生成代码

  1. 在 MATLAB 中编写入口函数,该入口函数:

    例如:

    function out = my_predict(in) %#codegen
    
    % A persistent object mynet is used to load the series network object.
    % At the first call to this function, the persistent object is constructed and
    % setup. When the function is called subsequent times, the same object is reused 
    % to call predict on inputs, thus avoiding reconstructing and reloading the
    % network object.
    
    persistent mynet;
    
    if isempty(mynet)
        mynet = coder.loadDeepLearningNetwork('myNetwork.mat');
    end
    
    % pass in input   
    out = predict(mynet,in,'MiniBatchSize',2); 

  2. 创建深度学习配置对象 dlconfig,将其配置为通过使用 coder.DeepLearningConfig 函数来生成泛型 C/C++ 代码。

    dlconfig = coder.DeepLearningConfig(TargetLibrary='none');

    为 MEX、可执行文件或者静态或动态链接库创建代码生成配置对象。默认情况下,代码生成器生成泛型 C 代码。要生成泛型 C++ 代码,请在代码生成配置对象中,将 TargetLang 参数设置为 'C++'。将 DeepLearningConfig 参数设置为之前创建的对象 dlconfig

    cfg = coder.config('lib');
    cfg.TargetLang = 'C++';
    cfg.DeepLearningConfig = dlconfig;
  3. 运行 codegen 命令。使用 -config 选项指定配置对象。使用 -args 选项指定输入类型。

    codegen -config cfg my_predict -args {myInput} -report

    注意

    您可以为代码生成指定半精度输入。但是,代码生成器类型会将输入转换为单精度。Deep Learning Toolbox 对 MATLAB 中的所有计算使用单精度浮点算术。

使用 MATLAB Coder 生成代码

  1. 按照通常的步骤指定入口函数和输入类型。请参阅使用 MATLAB Coder 生成 C 代码

  2. 生成代码步骤中:

    • 语言设置为 CC++

    • 点击更多设置。在深度学习窗格中,将目标库设置为

  3. 生成代码。

转移 DNN 常量

当您生成泛型 C/C++ 深度学习代码时,代码生成器会将深度神经网络 (DNN) 的大型常量写入二进制数据文件,而不是将常量嵌入到生成的代码中。要自定义此行为,请设置配置参数 LargeConstantGenerationLargeConstantThreshold

默认情况下,生成的应用程序在 codegen 文件夹中查找二进制数据文件。如果要将生成的应用程序和数据文件转移到不同位置,如嵌入式板,请创建一个名为 CODER_DATA_PATH 的环境变量,其值是转移后的数据文件的位置。然后,生成的应用程序将在此位置寻找数据文件。

有关此功能的示例,请参阅Generate Code for a Deep Learning Network for x86-64 Platforms Using Advanced Vector Instructions

另请参阅

| |

相关主题