Я играю с использованием 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 }