首页 > 解决方案 > 如何在 ML.NET 中将 ONNX 中的数据作为 float32[N,60,1] 插入

问题描述

我正在使用 ML.NET,我想插入一个float32[N, 60, 1]作为输入(如图所示)。我不知道如何传递数据。我正在尝试这门课:

public class OnnxInput
{
    [ColumnName("lstm_input")]
    public float lstm_input { get; set; }
}

var input = new OnnxInput[length][];

// Here I load the data into the input variable

var dataView = mlContext.Data.LoadFromEnumerable(input);
var pipeline = mlContext.Transforms.
            ApplyOnnxModel(
                    modelFile: modelLocation,
                    inputColumnNames: new[] { TinyYoloModelSettings.ModelInput },
                    outputColumnNames: new[] { TinyYoloModelSettings.ModelOutput }
                );
var model = pipeline.Fit(data);

创建此矩阵时,当我尝试将数据放入管道时出现错误:System.ArgumentOutOfRangeException:'无法确定 IDataView 类型并为成员 SyncRoot 注册了自定义类型(参数'rawType')'

尝试使用另一种方法,使用此输入类:

public class OnnxInput
{
    [ColumnName("lstm_input")]
    public float[] lstm_input { get; set; }
}

var input = new OnnxInput[realLength];

// Here I load the data into the input variable

var dataView = mlContext.Data.LoadFromEnumerable(input);
var pipeline = mlContext.Transforms.
            ApplyOnnxModel(
                    modelFile: modelLocation,
                    inputColumnNames: new[] { TinyYoloModelSettings.ModelInput },
                    outputColumnNames: new[] { TinyYoloModelSettings.ModelOutput }
                );
var model = pipeline.Fit(data);

创建此矩阵时,当我尝试将数据放入管道时出现错误:System.InvalidOperationException:'不支持可变长度输入列'

在此处输入图像描述

标签: c#.net.net-coreml.netonnx

解决方案


可变输入错误(不支持可变长度输入列)仅表示您的模型需要固定大小的输入。具体来说,您可以在类[VectorType(60, 1)]中的属性之上添加属性。lstm_inputOnnxInput


推荐阅读