When running the vanilla xor, I get widly varying results after training, yet with a very low measured error. almost random results with low error, both in debugger and when printing to console.
Hi all. I tried this again, using the example given in the docs (same as above), just with console outputs. Its still generating basically random outputs, only occasionally right.
Description
When running the vanilla xor, I get widly varying results after training, yet with a very low measured error. almost random results with low error, both in debugger and when printing to console.
Screenshots
5 consecutive runs (error is line 1):
-0 [ 1 ] [ 1 ] [ -1 ] [ 1 ]
-0 [ 0 ] [ 1 ] [ 0 ] [ 0 ]
0.00019156340528790638 [ 0.5116388521017431 ] [ 0.3428954069380361 ] [ 0.5116388521017431 ] [ 0.3428954069380361 ]
-0 [ 0.34173701088298947 ] [ 0.005307673690185314 ] [ 0.0017903267041861595 ] [ 6.842180212331013e-7 ]
-0 [ 1 ] [ 0 ] [ 0 ] [ 0 ]
Files
A list of relevant files for this issue. This will help people navigate the project and offer some clues of where to start.
To Reproduce
const chai = require('chai') const assert = chai.assert
let { Network, methods } = require('@liquid-carrot/carrot');
// this network learns the XOR gate (through neuro-evolution) async function execute () { // no hidden layers... var network = new Network(2,1);
// XOR dataset var trainingSet = [ { input: [0,0], output: [0] }, { input: [0,1], output: [1] }, { input: [1,0], output: [1] }, { input: [1,1], output: [0] } ];
const results = await network.evolve(trainingSet, { mutation: methods.mutation.FFW, equal: true, error: 0.0003, elitism: 10, mutation_rate: 0.3, threads: 5 }); console.log(results.error) assert.isBelow(results.error, 0.0003); // and it works! console.log(network.activate([0,0])); // 0.2413 console.log(network.activate([0,1])); // 1.0000 console.log(network.activate([1,0])); // 0.7663 console.log(network.activate([1,1])); // 0.008 }
execute();
/// threads 1, 1000 iterations -- logging
teration 100 fitness -0.0011220021193443105 error 0.0005220021193443104 iteration 200 fitness -0.0006363003302362967 error 0.0000363003302362966 iteration 300 fitness -0.0006277835038999049 error 0.00002778350389990485 iteration 400 fitness -0.0006250023524746145 error 0.00002500235247461448 iteration 500 fitness -0.0006244568900950992 error 0.000024456890095099146 iteration 600 fitness -0.0006058503711863999 error 0.00000585037118639982 iteration 700 fitness -0.0006041840989964885 error 0.000004184098996488483 iteration 800 fitness -0.0006020429427010222 error 0.0000020429427010221213 iteration 900 fitness -0.0006014404264906937 error 0.000001440426490693686 iteration 1000 fitness -0.0006014404264906937 error 0.000001440426490693686 0.000001440426490693686 [ 0.99596362676882 ] [ 0.496402339649377 ] [ 0.41957367383984256 ] [ 0.034813165252755914 ] neon_carrot % node test1.js iteration 100 fitness -0.0012000000000000001 error -0 iteration 200 fitness -0.0012000000000000001 error -0 iteration 300 fitness -0.0012000000000000001 error -0 iteration 400 fitness -0.0012000000000000001 error -0 iteration 500 fitness -0.0012000000000000001 error -0 iteration 600 fitness -0.0012000000000000001 error -0 iteration 700 fitness -0.0011 error -0 iteration 800 fitness -0.0011 error -0 iteration 900 fitness -0.0011 error -0 iteration 1000 fitness -0.0011 error -0 -0 [ 0.27516382951966845 ] [ 0.3855840206635007 ] [ 0.27516382951966845 ] [ 0.3855840206635007 ] neon_carrot % node test1.js iteration 100 fitness -0.0006000000000000001 error -0 iteration 200 fitness -0.0006000000000000001 error -0 iteration 300 fitness -0.0006000000000000001 error -0 iteration 400 fitness -0.0006000000000000001 error -0 iteration 500 fitness -0.0006000000000000001 error -0 iteration 600 fitness -0.0006000000000000001 error -0 iteration 700 fitness -0.0006000000000000001 error -0 iteration 800 fitness -0.0006000000000000001 error -0 iteration 900 fitness -0.0006000000000000001 error -0 iteration 1000 fitness -0.0006000000000000001 error -0 -0 [ 1 ] [ -1 ] [ 1 ] [ 1 ]
// then after many tries it gets it right
iteration 100 fitness -0.0004567252593608716 error 0.0002567252593608716 iteration 200 fitness -0.00021686014209889781 error 0.000016860142098897805 iteration 300 fitness -0.00020795225452568586 error 0.000007952254525685855 iteration 400 fitness -0.0002029582806041947 error 0.0000029582806041947003 iteration 500 fitness -0.0002029582806041947 error 0.0000029582806041947003 iteration 600 fitness -0.00020277357041923415 error 0.0000027735704192341406 iteration 700 fitness -0.00020082334109185242 error 8.233410918524102e-7 iteration 800 fitness -0.00020082334109185242 error 8.233410918524102e-7 iteration 900 fitness -0.00020082334109185242 error 8.233410918524102e-7 iteration 1000 fitness -0.00020082334109185242 error 8.233410918524102e-7 8.233410918524102e-7 [ 0.0002002736795891913 ] [ 0.9990157960831416 ] [ 1.0006023497616376 ] [ 0.0013862799989068364 ]