【问题标题】:Loading Classification Model in Simulink在 Simulink 中加载分类模型
【发布时间】:2017-09-28 04:39:10
【问题描述】:

我使用 Matlab 的分类学习器应用程序训练了一个分类模型(分类树)。我已将其导出到工作区并将其另存为 .mat 文件。

我需要将其嵌入到 Simulink 模型中,以便在仿真期间的每个时间步进行预测。我尝试使用 Matlab 函数块并使用“加载”从 .mat 文件加载分类树,然后使用 mdl.predictFcn(myInputData) 对新数据进行预测。但是,当我尝试运行 simulink 模型时出现错误:

使用函数“加载”发现不支持的变量类。 MATLAB 在“mdl.ClassifierTTC.predictFcn”找到的类“function_handle”是 不支持。

这是否意味着我不能在 Simulink 中使用我的分类模型?有没有人尝试过这样做?

提前致谢。

【问题讨论】:

  • 这意味着您不能使用MATLAB Function,但可以使用Interpreted MATLAB Function 或m 代码S-Function
  • 您好菲尔,感谢您的回答。我写了一个 S-Function,它起作用了。但是,我的最终目标是编译 Simulink 模型,编译器现在需要一个用于 S-Function 模块的 .tlc 文件。如何生成 .tlc 文件?
  • 您需要自己编写。请注意,您使用的功能基本上需要 MATLAB 才能执行,因此 Simulink Coder 不支持。您的 .tlc 文件将需要让 Simulink Coder 生成使用 MATLAB API 功能来执行您的(编译代码)的 c 代码(用于此模块),因此在目标机器上需要 MATLAB。
  • 我明白了。目标机器安装了 MATLAB,所以如果可以让 .tlc 做到这一点,我猜它应该可以工作。但是,我从来没有写过 .tlc 文件,更不用说这样的高级版本了,你知道我可以用作示例的任何示例代码吗?是否可以使用 S-Function 构建器执行此操作(我相信它会生成一个 .tlc)?
  • S-Function 构建器用于创建 C 代码 S-Function。大概你有一个 m-code S-function。您需要自己编写 tlc 文件。这很重要,尽管 Simulink Coder 文档有示例,但它不会是剪切/粘贴/修改已经存在的内容的情况。但从 Simulink Coder 文档的 TLC 部分开始。

标签: matlab machine-learning simulink


【解决方案1】:

无需编写任何 C 代码即可解决此问题。可以使用 MATLAB 的代码生成器生成所有必要的 C 代码。

生成分类模型后,将其从 Classification Learner App 导出到工作区,然后使用 saveCompactModel() 函数将其保存。请注意,即使在最新的 MATLAB 版本 (2017a) 中也不支持某些分类器模型。

编写一个 m 文件,加载和传递看不见的数据给分类器,并使用 predict() 函数从分类器中获取分类标签。使用带有 dll 配置的 codegen() 从 m 文件生成 C 代码,但不要让它编译。这将生成所有必要的头文件和源文件。

现在,使用 legacy_code() 生成一个 S-Function 以将 C 代码导入 Simulink。将所有生成的头文件和源文件链接到 S 函数,并使用 legacy_code() 生成 S 函数块和 tlc 文件。

这会生成一个 S 函数块,其中嵌入了分类器和预测函数。 legacy_code() 函数为此 S Function 生成一个 tlc,并允许编译 S Function 块。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-21
    • 2017-05-31
    • 2013-10-03
    相关资源
    最近更新 更多