如何将监督数据加载到 MLContext 对象中
How to load supervised data into MLContext object
我的情况
我正在尝试创建一个神经网络,使用 ML.net 对两种类型的信号(本质上是或否)进行分类。我有一组数据映射到 no,另一组数据映射到 yes。我希望用这些数据来训练网络。
我的问题
由于我的训练数据受到监督(我知道所需的输出),我如何 "tell" 所有数据应映射到 "yes" 的 LoadFromTextFile
函数(或 1 无关紧要)
My Question
In short, how do you train a network with supervised data(I know the desired output of my training data) in ML.Net?
我的数据模型:
public class Analog
{
[LoadColumn(0, Global.SAMPLE_SIZE - 1)]
[VectorType(Global.SAMPLE_SIZE)]
public float[] DiscreteSignal { get; set; }
}
加载代码:
//Create MLContext
static MLContext mCont = new MLContext();
//Load Data
IDataView data = mCont.Data.LoadFromTextFile<Analog>("myYesSignalData.csv", separatorChar: ',', hasHeader: false);
ML.NET 支持将多个数据集加载到一个 IDataView
中,方法是使用 MultiFileSource
class:
var loader = mCont.Data.LoadFromTextFile<Analog>(separatorChar: ',', hasHeader: false);
IDataView data = loader.Load(new MultiFileSource("myYesSignalData.csv", "myNoSignalData.csv"));
但是,我目前看不出有什么办法可以让培训师知道哪些例子是正面的,哪些是负面的,除了在两个文件中添加一个标签列:在 "yes" 文件中添加一个全一列并在 "no" 文件中添加一个全零列。然后这样定义 Analog
class:
public class Analog
{
[LoadColumn(0, Global.SAMPLE_SIZE - 1)]
[VectorType(Global.SAMPLE_SIZE)]
public float[] DiscreteSignal { get; set; }
[LoadColumn(Global.SAMPLE_SIZE)]
public float Label { get; set; }
}
添加标签列可以使用简单的 C# 程序完成,例如:
public class AnalogNoLabel
{
[LoadColumn(0, Global.SAMPLE_SIZE - 1)]
[VectorType(Global.SAMPLE_SIZE)]
public float[] DiscreteSignal { get; set; }
}
public void AddLabel(MLContext mCont)
{
IDataView data = mCont.Data.LoadFromTextFile<AnalogNoLabel>("myYesSignalData.csv", separatorChar: ',', hasHeader: false);
var pipeline = mCont.Transforms.CustomMapping<AnalogNoLabel, Analog>((input, output) => {
output.DiscreteSignal = input.DiscreteSignal;
output.Label = 1;
}, contractName: null);
IDataView dataWithLabel = pipeline.Fit(data).Transform(data);
using (var stream = new FileStream("myNewYesSignalData.txt", FileMode.Create))
mCont.Data.SaveAsText(dataWithLabel, stream);
}
和 "myNoSignalData.csv" 的类似脚本,使用 output.Label = 0
而不是 output.Label = 1
。
我的情况 我正在尝试创建一个神经网络,使用 ML.net 对两种类型的信号(本质上是或否)进行分类。我有一组数据映射到 no,另一组数据映射到 yes。我希望用这些数据来训练网络。
我的问题
由于我的训练数据受到监督(我知道所需的输出),我如何 "tell" 所有数据应映射到 "yes" 的 LoadFromTextFile
函数(或 1 无关紧要)
My Question In short, how do you train a network with supervised data(I know the desired output of my training data) in ML.Net?
我的数据模型:
public class Analog
{
[LoadColumn(0, Global.SAMPLE_SIZE - 1)]
[VectorType(Global.SAMPLE_SIZE)]
public float[] DiscreteSignal { get; set; }
}
加载代码:
//Create MLContext
static MLContext mCont = new MLContext();
//Load Data
IDataView data = mCont.Data.LoadFromTextFile<Analog>("myYesSignalData.csv", separatorChar: ',', hasHeader: false);
ML.NET 支持将多个数据集加载到一个 IDataView
中,方法是使用 MultiFileSource
class:
var loader = mCont.Data.LoadFromTextFile<Analog>(separatorChar: ',', hasHeader: false);
IDataView data = loader.Load(new MultiFileSource("myYesSignalData.csv", "myNoSignalData.csv"));
但是,我目前看不出有什么办法可以让培训师知道哪些例子是正面的,哪些是负面的,除了在两个文件中添加一个标签列:在 "yes" 文件中添加一个全一列并在 "no" 文件中添加一个全零列。然后这样定义 Analog
class:
public class Analog
{
[LoadColumn(0, Global.SAMPLE_SIZE - 1)]
[VectorType(Global.SAMPLE_SIZE)]
public float[] DiscreteSignal { get; set; }
[LoadColumn(Global.SAMPLE_SIZE)]
public float Label { get; set; }
}
添加标签列可以使用简单的 C# 程序完成,例如:
public class AnalogNoLabel
{
[LoadColumn(0, Global.SAMPLE_SIZE - 1)]
[VectorType(Global.SAMPLE_SIZE)]
public float[] DiscreteSignal { get; set; }
}
public void AddLabel(MLContext mCont)
{
IDataView data = mCont.Data.LoadFromTextFile<AnalogNoLabel>("myYesSignalData.csv", separatorChar: ',', hasHeader: false);
var pipeline = mCont.Transforms.CustomMapping<AnalogNoLabel, Analog>((input, output) => {
output.DiscreteSignal = input.DiscreteSignal;
output.Label = 1;
}, contractName: null);
IDataView dataWithLabel = pipeline.Fit(data).Transform(data);
using (var stream = new FileStream("myNewYesSignalData.txt", FileMode.Create))
mCont.Data.SaveAsText(dataWithLabel, stream);
}
和 "myNoSignalData.csv" 的类似脚本,使用 output.Label = 0
而不是 output.Label = 1
。