【问题标题】:Generic import and run of ML onnx model using ML.Net使用 ML.Net 通用导入和运行 ML onnx 模型
【发布时间】:2023-01-25 08:11:18
【问题描述】:

我正在尝试弄清楚如何创建代码以使用一个输入导入 ONNX 模型,该输入是一组平面浮点数。但是在编译时我不知道数组的长度。这阻止了我创建这段代码。我使用这个声明:

mlContext.Model.CreatePredictionEngine<OnnxInput, OnnxOutput>

其中 On Input 类包含属性,其中一个属性指定数组的长度

[VectorType(1024)]
[ColumnName("input1")]
public float[] data { get; set; }

但是我不知道一般的长度,所以1024这个数字一般是错误的。 我试图查看在 C# 中使用动态对象,但它似乎只支持对象,不支持类型。也许有更好的方法来使用“ML.Net”来实现我想要的?

【问题讨论】:

    标签: c# dynamic ml.net


    【解决方案1】:

    很难提供答案,因为很多时候你如何去做取决于你使用的模型。不过一般来说,您可以尝试两种方法:

    1. 动态大小 - 您可以通过使用 VectorType() 属性而不是 VectorType(n) 来实现,其中 N 是向量的维度。
    2. 固定大小——通常如前所述,虽然在 ONNX 模型中没有注释,但很可能在模型文件或类似的地方可以找到此信息。例如,有一些像 BERT 这样的模型将输入的令牌数量限制为 512。考虑到这一点,您可以按照今天所做的操作并使用VectorType(512),这意味着您的输入将始终为 512。任何较长的文本都将被截断,而任何较短的文本将被填充(添加空 /填充值)。

    【讨论】:

    • 感谢您的回答,很高兴对此有第二意见。我会将其设置为答案。
    【解决方案2】:

    我会添加这个作为评论,但我必须先有 50 个声望。 在这里查看我的回答https://stackoverflow.com/a/74311274/16802462,了解如何在运行时设置矢量长度。它就像在模式中设置长度,然后在创建时将该模式传递给模型一样简单。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-10
      • 2020-03-09
      相关资源
      最近更新 更多