Brain.js обучение может не использовать все мои данные обучения? - PullRequest
0 голосов
/ 19 сентября 2019

Я играю с использованием brain.js для прогнозирования использования воды в моем доме.Каждую секунду я даю ему галлоны, использованные до сих пор в тот день, и метку времени, и я хочу, чтобы он выводил, сколько галлонов, по его мнению, я бы использовал к концу дня.

У меня есть тренировочный элемент для каждой секунды каждого дня,и в настоящее время я тренируюсь с 3 днями собранных данных, у меня есть ~ 250 000 элементов обучения.Для тренировки я даю input: { gallonsSoFar: <gallons (0-1)>, timestamp: <percentage of day passed> }}, оба из которых нормализуются, чтобы быть между 0 и 1. И результат, полученный для обучения, - это фактические галлоны, которые я использовал в тот день (также нормализованные).Следует отметить, что тренировочные данные каждого дня будут иметь одинаковый результат для всех его обучающих элементов.

Моя проблема в том, что при тренировке с моими тренировочными данными brain.js сходится с 0 итерациями, чтобы получить ошибку~ 0.0000x.При проверке с данными сеть выдает только 1 значение, независимо от того, какие данные я ему предоставляю.Выход сети близок к результату обучения за последний день в тренировочном наборе.Может ли это быть только использование более позднего подмножества, содержащего только данные за последний день в обучающем наборе?

Вот примеры обучающих элементов, по одному из каждого из 3-х дней, так что вы можете увидеть мои данные:

{input: {gallonsSoFar: 0.0009922967080000001, timestamp: 0.28744635416666664}, output: {gallons: 0.15900049135999902}}, 
{input: {gallonsSoFar: 0.12988931804399814, timestamp: 0.7478611921296296}, output: {gallons: 0.14486435972399841}}
{input: {gallonsSoFar: 0.052951639331998236, timestamp: 0.47115515046296297}, output: {gallons: 0.22322169950398996}}

Вот как я настраиваю обучение ...

var net = new brain.NeuralNetwork({hiddenLayers: 5});

    net.train(trainingData, {
          iterations: 20000,    // the maximum times to iterate the training data --> number greater than 0
          errorThresh: 0.05,   // the acceptable error percentage from training data --> number between 0 and 1
          log: true,           // true to use console.log, when a function is supplied it is used --> Either true or a function
    });

    console.log(net.run({ input: { gallonsSoFar: 0, timestamp: 0.000001 }}));
    console.log(net.run({ input: { gallonsSoFar: 0.005422257596000007, timestamp: 0.30393769675925925 }})); //expected output: 0.22322169950398996
    console.log(net.run({ input: { gallonsSoFar: 0.004017469735999997, timestamp: 0.11428484953703703 }})); //expected output: 0.14486435972399841

В результате для всех тестовых значений в конце я получаю что-то близкое к ...

{ gallons: 0.2285303829611631 }
{ gallons: 0.2285303829611631 }
{ gallons: 0.2285303829611631 }
...