C# 用于动态加载的ML.net数据结构
我在创建一个合适的数据结构时遇到了一个问题,然后可以在ML.net上下文中使用它来为训练数据创建一个新的数据结构。数据将存储在内存中,大多数在线示例都显示了通过CSV或文本文件加载数据的方法。。。所以我需要使用这里的方法 让我们从一个简单的例子开始。假设我的应用程序正在尝试加载两个数据流(都是float类型,每个数据列表中只有10个项目)。示例数据可能如下所示:C# 用于动态加载的ML.net数据结构,c#,ml.net,C#,Ml.net,我在创建一个合适的数据结构时遇到了一个问题,然后可以在ML.net上下文中使用它来为训练数据创建一个新的数据结构。数据将存储在内存中,大多数在线示例都显示了通过CSV或文本文件加载数据的方法。。。所以我需要使用这里的方法 让我们从一个简单的例子开始。假设我的应用程序正在尝试加载两个数据流(都是float类型,每个数据列表中只有10个项目)。示例数据可能如下所示: public class MLCodifiedData { public MLCodifiedData(string lab
public class MLCodifiedData
{
public MLCodifiedData(string label, List<object> list)
{
Label = label;
Features = list;
}
public List<object> Features { get; set; }
public string Label { get; set; }
}
{Num_A: Vector<Single, 10>}
{Num_B: Vector<Single, 10>}
public class MLCodifiedData
{
public MLCodifiedData(string label, List<object> list)
{
Label = label;
Features = list;
}
public List<object> Features { get; set; }
public string Label { get; set; }
}
{Num_A: Vector<Single, 10>}
{Num_B: Vector<Single, 10>}
在我试图从两个输入流创建训练数据的代码部分,我得到了以下内容:
if (mlContext == null) mlContext = new MLContext(seed: 0);
var builder = new DataViewSchema.Builder();
CodifiedFloatDataStream[] inMemoryCollection = new CodifiedFloatDataStream[input.Count];
for (int i = 0; i < input.Count; i++)
{
MLCodifiedData codifiedData = input[i].Value as MLCodifiedData;
int featureDimension = codifiedData.Features.Count;
var vectorItemType = NumberDataViewType.Single;
builder.AddColumn(codifiedData.Label, new VectorDataViewType(vectorItemType, featureDimension));
float[] array = new float[codifiedData.Features.Count];
for(int j = 0; j < codifiedData.Features.Count; j++)
{
GH_Number element = codifiedData.Features[j] as GH_Number;
array[j] = (float)element.Value;
}
inMemoryCollection[i] = new CodifiedFloatDataStream(array);
}
var schema = builder.ToSchema();
IDataView data = mlContext.Data.LoadFromEnumerable<CodifiedFloatDataStream>(inMemoryCollection, schema);
if(mlContext==null)mlContext=newmlcontext(seed:0);
var builder=new DataViewSchema.builder();
CodecodedFloatDataStream[]inMemoryCollection=新的CodecodedFloatDataStream[input.Count];
for(int i=0;i
现在,当我逐步完成代码并在最后一行中放置一个断点,尝试创建IDataView对象时,我可以看到模式包含两列,如下所示:
public class MLCodifiedData
{
public MLCodifiedData(string label, List<object> list)
{
Label = label;
Features = list;
}
public List<object> Features { get; set; }
public string Label { get; set; }
}
{Num_A: Vector<Single, 10>}
{Num_B: Vector<Single, 10>}
{Num_A:Vector}
{Num_B:Vector}
对我来说,我认为这就是模式应该是什么样子,所以我认为我在这方面做得很好。但是,当我试图跨过最后一行时,我得到一个错误,它说,“类型应该包含一个名为Num_a”的成员。我被困在这里,因为我不知道如何格式化CodedFloatDataStream类或inMemoryCollection,以便使用此模式正确加载。有人能给我提供一些关于我做错了什么的指导吗