ML.Net 即使我有数据,AutoML 也会出现空引用异常?
ML.Net AutoML is getting null reference exception even though I have data?
我正在学习 ML.Net 并尝试使用 AutoML API 并遇到空引用异常。问题已根据我最近的学习和最少量的代码进行了更新。
把它放在 VSCode 中,您也可以体验二维向量爆炸。
class Program
{
static void Main(string[] args)
{
var mlContext = new MLContext();
// create schema for multidimensional vector
var autoSchema = SchemaDefinition.Create(typeof(InputData));
var col = autoSchema[1];
col.ColumnType = new VectorDataViewType(NumberDataViewType.Single, 3, 60);
// fabricate some data
var trainingData = new List<InputData>();
var inputData = new InputData();
inputData.MultiDimensional = new float[20,20];
for (int i = 0; i < inputData.MultiDimensional.GetUpperBound(0); i++)
{
for (int j = 0; j < inputData.MultiDimensional.GetUpperBound(1); j++)
{
inputData.MultiDimensional[i,j] = 5; // doesn't matter
}
}
trainingData.Add(inputData);
// setup a data view
IDataView trainingDataView = mlContext.Data.LoadFromEnumerable<InputData>(trainingData, autoSchema);
// preview it (goes BOOM)
var preview = trainingDataView.Preview();
// run the experiment
var settings = new BinaryExperimentSettings();
settings.MaxExperimentTimeInSeconds = 60;
ExperimentResult<BinaryClassificationMetrics> experimentResult = mlContext.Auto()
.CreateBinaryClassificationExperiment(settings)
.Execute(trainingDataView);
}
}
public class InputData
{
public bool Label { get; set; }
public float[,] MultiDimensional { get; set; }
}
为了解决我的多维向量问题,我试过:
- 正在删除
InputData
中的 float[,]
初始值设定项
- 用
[VectorType(3,60)]
为每个 属性 指定确切的大小
- 完全关闭
[VectorType]
属性并使用自动架构来设置它。
- 完全关闭
[VectorType]
属性,不使用自动模式让 ML.net 自行解决
- 仅添加
[VectorType()]
,尽管文档说这是针对一维数组的。
我现在的问题是 - 在 ML.Net 的 AutoML 部分使用多维向量的正确方法是什么?这可能吗?
哇哦,几年后发现我自己的问题仍然悬而未决。从评论中发布的 github 问题来看,这仍然是不可能的。 2022 年的 github issue 证实情况仍然如此。
我正在学习 ML.Net 并尝试使用 AutoML API 并遇到空引用异常。问题已根据我最近的学习和最少量的代码进行了更新。
把它放在 VSCode 中,您也可以体验二维向量爆炸。
class Program
{
static void Main(string[] args)
{
var mlContext = new MLContext();
// create schema for multidimensional vector
var autoSchema = SchemaDefinition.Create(typeof(InputData));
var col = autoSchema[1];
col.ColumnType = new VectorDataViewType(NumberDataViewType.Single, 3, 60);
// fabricate some data
var trainingData = new List<InputData>();
var inputData = new InputData();
inputData.MultiDimensional = new float[20,20];
for (int i = 0; i < inputData.MultiDimensional.GetUpperBound(0); i++)
{
for (int j = 0; j < inputData.MultiDimensional.GetUpperBound(1); j++)
{
inputData.MultiDimensional[i,j] = 5; // doesn't matter
}
}
trainingData.Add(inputData);
// setup a data view
IDataView trainingDataView = mlContext.Data.LoadFromEnumerable<InputData>(trainingData, autoSchema);
// preview it (goes BOOM)
var preview = trainingDataView.Preview();
// run the experiment
var settings = new BinaryExperimentSettings();
settings.MaxExperimentTimeInSeconds = 60;
ExperimentResult<BinaryClassificationMetrics> experimentResult = mlContext.Auto()
.CreateBinaryClassificationExperiment(settings)
.Execute(trainingDataView);
}
}
public class InputData
{
public bool Label { get; set; }
public float[,] MultiDimensional { get; set; }
}
为了解决我的多维向量问题,我试过:
- 正在删除
InputData
中的 - 用
[VectorType(3,60)]
为每个 属性 指定确切的大小
- 完全关闭
[VectorType]
属性并使用自动架构来设置它。 - 完全关闭
[VectorType]
属性,不使用自动模式让 ML.net 自行解决 - 仅添加
[VectorType()]
,尽管文档说这是针对一维数组的。
float[,]
初始值设定项
我现在的问题是 - 在 ML.Net 的 AutoML 部分使用多维向量的正确方法是什么?这可能吗?
哇哦,几年后发现我自己的问题仍然悬而未决。从评论中发布的 github 问题来看,这仍然是不可能的。 2022 年的 github issue 证实情况仍然如此。