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

如何在ML.NET C#中使用ONNX模型传入输入并获取输出结果

ML.NET加载PyTorch导出的ONNX模型实现步骤

你提到的Python侧使用示例与Netron模型结构如下:
输入示例
模型结构

1 安装依赖NuGet包

在你的C#项目中安装以下包:

  • Microsoft.ML
  • Microsoft.ML.OnnxRuntime
  • Microsoft.ML.OnnxTransformer
    如果需要GPU加速,可额外安装Microsoft.ML.OnnxRuntime.Gpu。

2 定义输入输出数据类

输入输出类的属性需要和ONNX模型的输入输出节点名完全匹配,可通过Netron查看节点的准确名称:

using Microsoft.ML.Data;

// 输入数据类
public class OnnxInput
{
    // ColumnName对应Netron中查看到的输入节点名,按需替换
    [ColumnName("input")]
    // 数组长度匹配模型要求的输入维度
    public float[] InputValue { get; set; }
}

// 输出数据类
public class OnnxOutput
{
    // 匹配你需要的输出节点名action
    [ColumnName("action")]
    // 长度为6的float数组,和模型输出形状一致
    public float[] Action { get; set; }
}

3 构建推理管道加载模型

using Microsoft.ML;

// 初始化ML上下文
var mlContext = new MLContext();

// 替换为你的ONNX模型本地路径
string modelPath = @"C:\your-path\model.onnx";

// 构建ONNX推理管道
var onnxPipeline = mlContext.Transforms.ApplyOnnxModel(
    outputColumnNames: new[] { "action" },
    inputColumnNames: new[] { "input" },
    modelFile: modelPath
    // 如果使用GPU,添加参数: gpuDeviceId: 0
);

// 加载模型(无训练过程,用空数据集Fit即可完成初始化)
var emptyDataset = mlContext.Data.LoadFromEnumerable(new List<OnnxInput>());
var loadedModel = onnxPipeline.Fit(emptyDataset);

// 创建预测引擎,建议全局单例复用避免性能损耗
var predEngine = mlContext.Model.CreatePredictionEngine<OnnxInput, OnnxOutput>(loadedModel);

4 执行预测获取结果

// 构造输入数据,数组长度严格匹配模型输入维度要求
var modelInput = new OnnxInput
{
    InputValue = new float[] { /* 替换为你的实际输入值 */ }
};

// 执行推理
var result = predEngine.Predict(modelInput);

// 直接获取长度为6的action输出数组
float[] actionOutput = result.Action;

注意事项

  • 输入数据的维度、数据类型必须和你导出ONNX时的Python侧输入完全一致,避免维度不匹配报错
  • 节点名大小写敏感,务必和Netron中显示的名称完全相同
  • 若出现输入形状不匹配错误,可先在Netron中查看输入节点的shape属性,再对应调整输入数组长度

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 01:36:09