Open spiffytech opened 7 years ago
I like your coding style, very clean! But what do you mean by training an 'identity function', cause nowhere in your code do I see the use of the identity function.
And what exactly are you training? Because if it is a dataset with relations over time you should definitely specify that the .evolve
function should use methods.mutation.ALL
.
Thanks!
By training an identity function, I mean I'm trying to train the neural net about a direct mapping between the input bits and the output bits, so that if I activate with a one-hot encoded word, I get the same one-hot encoded word back out.
I was originally trying to evolve a network following the same training procedure as word2vec, but I wasn't getting sensible activation outputs. So I started simplifying to the easiest similar problem I could think of (this), and found I still wasn't getting sensible outputs.
Hmm. I tried some small tests with limited time and noticed that for small datasets it would perform fine.
However, keep in mind that the 'identity' problem is not as easy to the neuro-evolution algorithm as it is to us (=humans). A network itself is not aware of its topology, and thus it is very hard for it to remove all connections from the input nodes to an output node except for one (which is coincidentally the same index, but the algorithm does not know).
I'll give it a few more tries later. But have a look at all the options there are for neuro-evolution, most of the times these issues are a trial and error process. (Btw, rate
is not an option for the .evolve
function)
That explanation makes sense. I'm still confused about how the network decides it's finished training (presumably reaching error <= 0.03) if it gets all my tests wrong.
I'm training an identity function with Neataptic, but I'm not getting accurate results. What am I doing wrong? (I'm super novice at machine learning, so I assume I'm making a simple mistake.)