Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 预检测引擎-架构不匹配:“0”;期望R4的标量或已知大小向量,得到可变大小向量“;_C#_Machine Learning_Ml.net - Fatal编程技术网

C# 预检测引擎-架构不匹配:“0”;期望R4的标量或已知大小向量,得到可变大小向量“;

C# 预检测引擎-架构不匹配:“0”;期望R4的标量或已知大小向量,得到可变大小向量“;,c#,machine-learning,ml.net,C#,Machine Learning,Ml.net,我试图训练和预测一个具有多种特征的模型。我们将我的数据称为“直方图”,带有一个浮点目标和Sensor1到Sensor6,它们是float[64] 数据从CSV加载,第一列作为目标,然后是第1-64列Sensor1、65-129列Sensor2等 直方图类: class Histogram { [LoadColumn(0)] public float Target; [LoadColumn(1, 64), ColumnName("Sensor1")] public floa

我试图训练和预测一个具有多种特征的模型。我们将我的数据称为“直方图”,带有一个浮点目标和
Sensor1
Sensor6
,它们是
float[64]

数据从CSV加载,第一列作为目标,然后是第1-64列Sensor1、65-129列Sensor2等

直方图类:

class Histogram
{
    [LoadColumn(0)] public float Target;
    [LoadColumn(1, 64), ColumnName("Sensor1")]
    public float[] Sensor1;
    [LoadColumn(65, 129), ColumnName("Sensor2")]
    public float[] Sensor2;
    [LoadColumn(130, 193), ColumnName("Sensor3")]
    public float[] Sensor3;
    [LoadColumn(194, 257), ColumnName("Sensor4")]
    public float[] Sensor4;
    [LoadColumn(258, 321), ColumnName("Sensor5")]
    public float[] Sensor5;
    [LoadColumn(322, 385), ColumnName("Sensor6")]
    public float[] Sensor6;
}
培训完成,但在创建具有以下内容的预测引擎时:

var predictor = trainedModel.CreatePredictionEngine<Histogram, PredictedTarget>(mlCtx);
我正在创建处理管道,如下所示:

IDataView baseTrainingDataView = mlCtx.Data.LoadFromTextFile<Histogram>(trainDataPath, hasHeader: true, separatorChar: ',');
var dataProcessPipeline = mlCtx.Transforms
            .CopyColumns(DefaultColumnNames.Label, nameof(Histogram.Target))
            .Append(mlCtx.Transforms.Normalize(nameof(Histogram.Sensor1), "Sensor1"))
            .Append(mlCtx.Transforms.Normalize(nameof(Histogram.Sensor2), "Sensor2"))
            .Append(mlCtx.Transforms.Normalize(nameof(Histogram.Sensor3), "Sensor3"))
            .Append(mlCtx.Transforms.Normalize(nameof(Histogram.Sensor4), "Sensor4"))
            .Append(mlCtx.Transforms.Normalize(nameof(Histogram.Sensor5), "Sensor5"))
            .Append(mlCtx.Transforms.Normalize(nameof(Histogram.Sensor6), "Sensor6"))
            .Append(mlCtx.Transforms.Concatenate(DefaultColumnNames.Features, "Sensor1", "Sensor2", "Sensor3", "Sensor4", "Sensor5", "Sensor6"));
IDataView baseTrainingDataView=mlCtx.Data.LoadFromTextFile(trainDataPath,HashHeader:true,separatorChar:',');
var dataProcessPipeline=mlCtx.Transforms
.CopyColumns(DefaultColumnNames.Label,nameof(Histogram.Target))
.Append(mlCtx.Transforms.Normalize(nameof(Histogram.Sensor1),“Sensor1”))
.Append(mlCtx.Transforms.Normalize(nameof(Histogram.Sensor2),“Sensor2”))
.Append(mlCtx.Transforms.Normalize(nameof(Histogram.Sensor3),“Sensor3”))
.Append(mlCtx.Transforms.Normalize(nameof(Histogram.Sensor4),“Sensor4”))
.Append(mlCtx.Transforms.Normalize(nameof(Histogram.Sensor5),“Sensor5”))
.Append(mlCtx.Transforms.Normalize(nameof(Histogram.Sensor6),“Sensor6”))
.Append(mlCtx.Transforms.Concatenate(DefaultColumnNames.Features,“传感器1”、“传感器2”、“传感器3”、“传感器4”、“传感器5”、“传感器6”);

实际上,我不确定还需要提供哪些信息,因为这是我第一次尝试使用ML.NET。我会根据需要编辑更多!谢谢。

大多数ML.NET培训师都希望使用固定大小的向量。 可以使用VectorType属性指定特征为向量。下面是使用VectorType属性装饰时直方图类的外观

class Histogram
{
    [LoadColumn(0)]
    public float Target;

    [LoadColumn(1, 64), ColumnName("Sensor1"), VectorType(64)]
    public float[] Sensor1;

    [LoadColumn(65, 129), ColumnName("Sensor2"), VectorType(64)]
    public float[] Sensor2;

    [LoadColumn(130, 193), ColumnName("Sensor3"), VectorType(64)]
    public float[] Sensor3;

    [LoadColumn(194, 257), ColumnName("Sensor4"), VectorType(64)]
    public float[] Sensor4;

    [LoadColumn(258, 321), ColumnName("Sensor5"), VectorType(64)]
    public float[] Sensor5;

    [LoadColumn(322, 385), ColumnName("Sensor6"), VectorType(64)]
    public float[] Sensor6;
}
另外,Normalize()方法的签名是Normalize(outputColumnName,inputColumnName)。尽管在这种情况下这可能无关紧要,因为输入列名和输出列名解析为相同的值(例如:Sensor1),但在调用中包含参数名可能更安全,因为有多个带有默认参数的Normalize()重载。虽然冗长,但包含参数名可以明确地表明您的意图

...
.Append(mlCtx.Transforms.Normalize(outputColumnName: "Sensor1",
                                   inputColumnName: nameof(Histogram.Sensor1)))
...

您能显示从文件读取的代码吗?@Jon,
mlCtx.Data.LoadFromTextFile
与CSV文件
trainDataPath
一起提供,这有助于通过之前出现异常的行!但是,现在
predictor.Predict(sample)
出现运行时异常。但无论如何,你已经赢得了赏金@帕特里克,你犯了什么错误?这很可能是PredictedTarget类的模式理解问题。您的PredictedTarget类中是否有保存回归值的class属性上的[ColumnName(“Score”)]属性装饰?@wgiri,我使用相同的
直方图
类,填充除
目标
之外的所有内容-将其保留为零。异常为System.InvalidOperationException:“由于对象的当前状态,操作无效。”能否发布PredictedTarget类的定义?
...
.Append(mlCtx.Transforms.Normalize(outputColumnName: "Sensor1",
                                   inputColumnName: nameof(Histogram.Sensor1)))
...