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

ML.NET调用ONNX模型报错:无法将IDataView列绑定到字段或属性

错误原因

ONNX模型输出的discrete_actions字段数据类型为Int64(对应C#中的long类型),你在OnnxOutput类中定义的Actions属性为Int32[](对应C#中的int数组),ML.NET无法自动完成这两种不同类型向量的绑定。

解决建议

方案1:直接修改输出类属性类型(推荐,实现最简单)

将OnnxOutput类中的Actions属性类型从int[]改为long[]即可,后续如果需要使用int类型的结果,手动做强制类型转换即可:

public class OnnxOutput
{
    [ColumnName("discrete_actions")]
    [VectorType(1, 1)]
    public long[] Actions { get; set; }
    public float [] Score { get;set; }
}
// 取值时转换为int的示例
Console.WriteLine($"Predicted Actions: {(int)prediction.Actions.First()}");

方案2:在推理管道中添加类型转换节点

如果你需要保持OnnxOutput类的int[]定义不变,可以在ApplyOnnxModel之后添加转换算子,将Int64向量转换为Int32向量:

static ITransformer GetPredictionPipeline(MLContext mlContext)
{
    var inputColumns = new string[]
    {
        "obs_0", "action_masks",
    };
    var outputColumns = new string[] { "discrete_actions" };
    var onnxPredictionPipeline =
    mlContext
    .Transforms
    .ApplyOnnxModel(
        outputColumnNames: outputColumns,
        inputColumnNames: inputColumns,
        ONNX_MODEL_PATH)
    // 新增转换:将Int64类型的discrete_actions转为Int32类型
    .Append(mlContext.Transforms.Conversion.ConvertType("discrete_actions", outputKind: DataKind.Int32));
    var emptyDv = mlContext.Data.LoadFromEnumerable(new OnnxInput[] {});
    return onnxPredictionPipeline.Fit(emptyDv);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 02:00:03