我的处境 我正在尝试创建一个神经网络,该网络使用ML.net对两种类型的信号(是或否)进行分类。我有一组数据映射为no,另一组数据映射为yes。我希望用这些数据来训练网络。
我的问题
由于我的训练数据是受监督的(我知道所需的输出),我如何“告诉” LoadFromTextFile
函数,所有数据都应映射为“是”(或无所谓1)
我的问题 简而言之,您如何在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);
答案 0 :(得分:4)
ML.NET支持通过使用IDataView
类将多个数据集加载到一个MultiFileSource
中:
var loader = mCont.Data.LoadFromTextFile<Analog>(separatorChar: ',', hasHeader: false);
IDataView data = loader.Load(new MultiFileSource("myYesSignalData.csv", "myNoSignalData.csv"));
但是,除了在两个文件中添加标签列之外,我目前看不到让培训师知道哪些示例是肯定的,哪些示例是负面的:在“是”文件中添加一个全为列,在“否”文件添加全零列。然后以这种方式定义Analog
类:
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);
}
,并且使用“ output.Label = 0
”代替“ output.Label = 1
”的“ myNoSignalData.csv”脚本。