You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ML.NET中导入输入为未知长度浮点数组的ONNX模型?

解决ML.NET中ONNX模型动态长度输入的问题

方案1:用VariableLengthVectorType替代固定长度特性

ML.NET 1.5及以上版本支持VariableLengthVectorType特性,无需指定固定数组长度,直接标注在输入属性上即可适配任意长度的一维浮点数组:

using Microsoft.ML.Data;

public class OnnxInput
{
    [VariableLengthVectorType]
    [ColumnName("input1")]
    public float[] data { get; set; }
}

public class OnnxOutput
{
    // 根据你的ONNX模型输出结构定义对应属性,示例:
    [ColumnName("output1")]
    public float[] result { get; set; }
}

创建预测引擎的代码保持不变:

var mlContext = new MLContext();
var predictionEngine = mlContext.Model.CreatePredictionEngine<OnnxInput, OnnxOutput>(onnxModel);

方案2:动态Schema定义(适配更灵活场景)

如果需要完全动态处理输入结构,可通过SchemaDefinition手动构建输入的动态类型:

var mlContext = new MLContext();

// 动态定义输入Schema
var inputSchema = SchemaDefinition.Create(typeof(DynamicOnnxInput));
var dataColumn = inputSchema["data"];
dataColumn.ColumnType = new VectorDataType(NumberDataKind.Single, -1); // -1代表可变长度
dataColumn.Name = "input1";

// 加载ONNX模型
var onnxModel = mlContext.Model.Load("your-model-path.onnx", out var modelSchema);

// 创建动态预测引擎
var predictionEngine = mlContext.Model.CreatePredictionEngine<DynamicOnnxInput, OnnxOutput>(onnxModel, inputSchema);

// 使用时可传入任意长度数组
var input = new DynamicOnnxInput { data = new float[768] }; // 示例长度768
var output = predictionEngine.Predict(input);

配套的基础输入类:

public class DynamicOnnxInput
{
    public float[] data { get; set; }
}

注意事项

  • 确保你的ONNX模型本身支持可变长度输入(即模型输入维度设置为动态,比如[1, -1]格式),否则即使ML.NET端设置可变长度,运行时也会报错。
  • 若使用旧版ML.NET,建议升级到1.5及以上版本以使用VariableLengthVectorType特性。

内容的提问来源于stack exchange,提问作者Ravi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 19:40:32