如何在ML.NET C#中使用ONNX模型传入输入并获取输出结果
ML.NET加载PyTorch导出的ONNX模型实现步骤
你提到的Python侧使用示例与Netron模型结构如下:

1 安装依赖NuGet包
在你的C#项目中安装以下包:
Microsoft.MLMicrosoft.ML.OnnxRuntimeMicrosoft.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
相关产品推荐
相关产品推荐

