trainInput function is acting strangely (and buggy)
See original GitHub issueHere’s your meme
What is wrong?
The function at https://github.com/BrainJS/brain.js/blob/master/src/recurrent/rnn.js#L211 behaves strangely… the input is correct (an array of numbers) but it outputs NaN, which in turn causes the chain of functions to fail and my network doesn’t train.
I investigated this further, and it turns out that the equation.predictTargetIndex(source, target)
will go for a bit, then spit out NaN, causing the rest of the chain to be NaN.
Where does it happen?
Dude I don’t even know. It happens when I try to train an LSTM network o.o
How do we replicate the issue?
- Run this code:
const messages = [ { input: 'string of words to check, essentially', output: 1 } ]
const brain = new brainjs.recurrent.LSTM({ hiddenLayers: [20, 20, 20] });
brain.train(messages, {
iterations: 20000,
errorThresh: 0.001,
log: true,
logPeriod: 10,
learningRate: 0.3,
momentum: 0.1,
callback: null,
callbackPeriod: 10,
timeout: Infinity,
});
How important is this (1-5)?
4, mainly because this is the example provided in the README. It seems no matter what settings I adjust, the same issue arises.
Expected behavior (i.e. solution)
The network… trains. No errors are thrown.
Other Comments
Here’s what I got from adding a bunch of console.logs:
System info: KDE Neon 5.18, node 12.16.2, brain.js v2.0.0-alpha.12
Edit: 4/25/20 @ 18:21
This thing is so inconsistent it amazes me.
[
{
input: 'somebody once told me the world was gonna roll me',
output: 0
}
]
works, but
[
{
input: '<vulgar phrases here>',
output: 1
}
]
doesnt.
Issue Analytics
- State:
- Created 3 years ago
- Comments:5 (3 by maintainers)
Top GitHub Comments
The problem is that you are using a number, and should be using a string:
output: 1
should beoutput: '1'
However, I’m adding a fix that will automatically convert this for you.
Also, your net is three LSTM layers, which seems pretty deep. Two would likely be plenty, from my naive perspective.