brain.js培训可能不会使用我的所有培训数据吗?

时间:2019-09-19 18:57:31

标签: javascript node.js brain.js

我正在使用brain.js预测家中的用水量。我每秒给它提供当天到目前为止使用的加仑油和一个时间戳,我希望它输出它认为在一天结束时我将使用多少加仑油。

我每天每一秒钟都有一个训练元素,而我目前正在使用3天的收集数据进行训练,我有大约250,000个训练元素。为了进行培训,我给了input: { gallonsSoFar: <gallons (0-1)>, timestamp: <percentage of day passed> }}都归一化为介于0和1之间。培训的输出是我当天使用的实际加仑(也归一化)。这里值得注意的是,每天有价值的训练数据对于所有训练元素都将具有相同的输出。

我的问题是,使用我的训练数据进行训练时,brain.js会进行0次迭代收敛,从而得出〜0.0000x的错误。使用数据进行测试时,无论我提供什么数据,网络都只会输出1值。网络的输出接近训练集中最后一天的训练输出。难道只使用后面的子集,只包含训练集中最后一天的数据吗?

以下是示例训练元素,为期3天,每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 }

0 个答案:

没有答案