Как загрузить контролируемые данные в объект MLContext - PullRequest
2 голосов
/ 18 января 2020

Моя ситуация Я пытаюсь создать нейронную сеть, которая классифицирует два типа сигналов (по существу, да или нет), используя ML. net. У меня есть один набор данных, который отображается на нет, а другой - на да. Я надеюсь обучить сеть с этими данными.

Моя проблема Так как мои тренировочные данные контролируются (я знаю желаемый результат), как мне "сказать" функции 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);

1 Ответ

3 голосов
/ 19 января 2020

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);
}

и аналогичной. скрипт для "myNoSignalData.csv" с output.Label = 0 вместо output.Label = 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...