jeffheaton / encog-java-core

http://www.heatonresearch.com/encog
Other
744 stars 268 forks source link

problem with train.getError() #203

Closed lasha81 closed 6 years ago

lasha81 commented 9 years ago

Hi all here is some part from my code:

NEATPopulation pop = new NEATPopulation(5, 1, 1000); pop.setInitialConnectionDensity(0.1); pop.reset();
pop.setNEATActivationFunction(new ActivationSigmoid());

MazeScore mazeScore = new MazeScore(); final EvolutionaryAlgorithm train = NEATUtil.constructNEATTrainer(pop, mazeScore); int epoch = 1; for (int i = 0; i < 100; i++) { train.iteration(); network = (NEATNetwork)train.getCODEC().decode(train.getBestGenome()); System.out.println("Epoch #" + epoch + " train.getError():" + train.getError()); System.out.println("Epoch #" + epoch + " MazeScore().calculateScore((network)):" + new MazeScore().calculateScore((network))); epoch++; }

and here are results:

Epoch #1 train.getError():863.0 Epoch #1 MazeScore().calculateScore((network)):30167.0 Epoch #2 train.getError():866.0 Epoch #2 MazeScore().calculateScore((network)):-13.0 Epoch #3 train.getError():866.0 Epoch #3 MazeScore().calculateScore((network)):-13.0 Epoch #4 train.getError():1554.0 Epoch #4 MazeScore().calculateScore((network)):30222.0 Epoch #5 train.getError():1554.0 Epoch #5 MazeScore().calculateScore((network)):30034.0 Epoch #6 train.getError():1589.0 Epoch #6 MazeScore().calculateScore((network)):30102.0 Epoch #7 train.getError():1589.0 Epoch #7 MazeScore().calculateScore((network)):30102.0 Epoch #8 train.getError():1589.0 Epoch #8 MazeScore().calculateScore((network)):30102.0 Epoch #9 train.getError():1589.0 Epoch #9 MazeScore().calculateScore((network)):30102.0 Epoch #10 train.getError():1589.0 Epoch #10 MazeScore().calculateScore((network)):30130.0 Epoch #11 train.getError():1589.0 Epoch #11 MazeScore().calculateScore((network)):30102.0 Epoch #12 train.getError():1757.0 Epoch #12 MazeScore().calculateScore((network)):30058.0 Epoch #13 train.getError():1763.0 Epoch #13 MazeScore().calculateScore((network)):649.0 Epoch #14 train.getError():1763.0 Epoch #14 MazeScore().calculateScore((network)):649.0 Epoch #15 train.getError():1763.0 Epoch #15 MazeScore().calculateScore((network)):649.0 Epoch #16 train.getError():1763.0 Epoch #16 MazeScore().calculateScore((network)):649.0 Epoch #17 train.getError():1763.0 Epoch #17 MazeScore().calculateScore((network)):649.0 Epoch #18 train.getError():1763.0 Epoch #18 MazeScore().calculateScore((network)):649.0 Epoch #19 train.getError():1763.0 Epoch #19 MazeScore().calculateScore((network)):649.0 Epoch #20 train.getError():1970.0 Epoch #20 MazeScore().calculateScore((network)):169.0 Epoch #21 train.getError():1970.0 Epoch #21 MazeScore().calculateScore((network)):169.0 Epoch #22 train.getError():2058.0 Epoch #22 MazeScore().calculateScore((network)):649.0 Epoch #23 train.getError():2058.0 Epoch #23 MazeScore().calculateScore((network)):649.0 Epoch #24 train.getError():2058.0 Epoch #24 MazeScore().calculateScore((network)):649.0 Epoch #25 train.getError():2058.0 Epoch #25 MazeScore().calculateScore((network)):649.0 Epoch #26 train.getError():2058.0 Epoch #26 MazeScore().calculateScore((network)):649.0 Epoch #27 train.getError():2058.0 Epoch #27 MazeScore().calculateScore((network)):649.0 Epoch #28 train.getError():2058.0 Epoch #28 MazeScore().calculateScore((network)):649.0 Epoch #29 train.getError():2058.0 Epoch #29 MazeScore().calculateScore((network)):649.0 Epoch #30 train.getError():2058.0 Epoch #30 MazeScore().calculateScore((network)):649.0 Epoch #31 train.getError():2058.0 Epoch #31 MazeScore().calculateScore((network)):649.0 Epoch #32 train.getError():2058.0 Epoch #32 MazeScore().calculateScore((network)):649.0 Epoch #33 train.getError():2058.0 Epoch #33 MazeScore().calculateScore((network)):649.0 Epoch #34 train.getError():2058.0 Epoch #34 MazeScore().calculateScore((network)):649.0 Epoch #35 train.getError():2058.0 Epoch #35 MazeScore().calculateScore((network)):649.0 Epoch #36 train.getError():2058.0 Epoch #36 MazeScore().calculateScore((network)):649.0 Epoch #37 train.getError():2058.0 Epoch #37 MazeScore().calculateScore((network)):649.0 Epoch #38 train.getError():2058.0 Epoch #38 MazeScore().calculateScore((network)):649.0 Epoch #39 train.getError():2058.0 Epoch #39 MazeScore().calculateScore((network)):649.0 Epoch #40 train.getError():2058.0 Epoch #40 MazeScore().calculateScore((network)):649.0 Epoch #41 train.getError():2058.0 Epoch #41 MazeScore().calculateScore((network)):649.0 Epoch #42 train.getError():2058.0 Epoch #42 MazeScore().calculateScore((network)):649.0 Epoch #43 train.getError():2058.0 Epoch #43 MazeScore().calculateScore((network)):649.0 Epoch #44 train.getError():2058.0 Epoch #44 MazeScore().calculateScore((network)):649.0 Epoch #45 train.getError():2058.0 Epoch #45 MazeScore().calculateScore((network)):649.0 Epoch #46 train.getError():2058.0 Epoch #46 MazeScore().calculateScore((network)):649.0 Epoch #47 train.getError():2058.0 Epoch #47 MazeScore().calculateScore((network)):649.0 Epoch #48 train.getError():2058.0 Epoch #48 MazeScore().calculateScore((network)):649.0 Epoch #49 train.getError():2058.0 Epoch #49 MazeScore().calculateScore((network)):649.0 Epoch #50 train.getError():2058.0 Epoch #50 MazeScore().calculateScore((network)):649.0 Epoch #51 train.getError():2058.0 Epoch #51 MazeScore().calculateScore((network)):649.0 Epoch #52 train.getError():2058.0 Epoch #52 MazeScore().calculateScore((network)):649.0 Epoch #53 train.getError():2058.0 Epoch #53 MazeScore().calculateScore((network)):649.0 Epoch #54 train.getError():2058.0 Epoch #54 MazeScore().calculateScore((network)):649.0 Epoch #55 train.getError():2058.0 Epoch #55 MazeScore().calculateScore((network)):649.0 Epoch #56 train.getError():2058.0 Epoch #56 MazeScore().calculateScore((network)):649.0 Epoch #57 train.getError():2062.0 Epoch #57 MazeScore().calculateScore((network)):-16.0 Epoch #58 train.getError():2062.0 Epoch #58 MazeScore().calculateScore((network)):-16.0 Epoch #59 train.getError():2062.0 Epoch #59 MazeScore().calculateScore((network)):-16.0 Epoch #60 train.getError():2062.0 Epoch #60 MazeScore().calculateScore((network)):-16.0 Epoch #61 train.getError():2062.0 Epoch #61 MazeScore().calculateScore((network)):-16.0 Epoch #62 train.getError():2062.0 Epoch #62 MazeScore().calculateScore((network)):-16.0 Epoch #63 train.getError():2062.0 Epoch #63 MazeScore().calculateScore((network)):-16.0 Epoch #64 train.getError():2062.0 Epoch #64 MazeScore().calculateScore((network)):-16.0 Epoch #65 train.getError():2062.0 Epoch #65 MazeScore().calculateScore((network)):-16.0 Epoch #66 train.getError():2062.0 Epoch #66 MazeScore().calculateScore((network)):-16.0 Epoch #67 train.getError():2062.0 Epoch #67 MazeScore().calculateScore((network)):-16.0 Epoch #68 train.getError():2062.0 Epoch #68 MazeScore().calculateScore((network)):-16.0 Epoch #69 train.getError():2062.0 Epoch #69 MazeScore().calculateScore((network)):-16.0 Epoch #70 train.getError():2062.0 Epoch #70 MazeScore().calculateScore((network)):-16.0 Epoch #71 train.getError():2062.0 Epoch #71 MazeScore().calculateScore((network)):-16.0 Epoch #72 train.getError():2062.0 Epoch #72 MazeScore().calculateScore((network)):-16.0 Epoch #73 train.getError():2062.0 Epoch #73 MazeScore().calculateScore((network)):-16.0 Epoch #74 train.getError():2062.0 Epoch #74 MazeScore().calculateScore((network)):-16.0 Epoch #75 train.getError():2062.0 Epoch #75 MazeScore().calculateScore((network)):-16.0 Epoch #76 train.getError():2087.0 Epoch #76 MazeScore().calculateScore((network)):-7.0 Epoch #77 train.getError():2087.0 Epoch #77 MazeScore().calculateScore((network)):-7.0 Epoch #78 train.getError():2087.0 Epoch #78 MazeScore().calculateScore((network)):-7.0 Epoch #79 train.getError():2087.0 Epoch #79 MazeScore().calculateScore((network)):-7.0 Epoch #80 train.getError():2087.0 Epoch #80 MazeScore().calculateScore((network)):-7.0 Epoch #81 train.getError():2087.0 Epoch #81 MazeScore().calculateScore((network)):-7.0 Epoch #82 train.getError():2087.0 Epoch #82 MazeScore().calculateScore((network)):-7.0 Epoch #83 train.getError():2087.0 Epoch #83 MazeScore().calculateScore((network)):-7.0 Epoch #84 train.getError():2087.0 Epoch #84 MazeScore().calculateScore((network)):-7.0 Epoch #85 train.getError():2087.0 Epoch #85 MazeScore().calculateScore((network)):-7.0 Epoch #86 train.getError():2087.0 Epoch #86 MazeScore().calculateScore((network)):-7.0 Epoch #87 train.getError():2087.0 Epoch #87 MazeScore().calculateScore((network)):-7.0 Epoch #88 train.getError():2087.0 Epoch #88 MazeScore().calculateScore((network)):-7.0 Epoch #89 train.getError():2087.0 Epoch #89 MazeScore().calculateScore((network)):-7.0 Epoch #90 train.getError():2087.0 Epoch #90 MazeScore().calculateScore((network)):-7.0 Epoch #91 train.getError():2087.0 Epoch #91 MazeScore().calculateScore((network)):-7.0 Epoch #92 train.getError():2087.0 Epoch #92 MazeScore().calculateScore((network)):-7.0 Epoch #93 train.getError():2087.0 Epoch #93 MazeScore().calculateScore((network)):-7.0 Epoch #94 train.getError():2087.0 Epoch #94 MazeScore().calculateScore((network)):-7.0 Epoch #95 train.getError():2087.0 Epoch #95 MazeScore().calculateScore((network)):-7.0 Epoch #96 train.getError():2087.0 Epoch #96 MazeScore().calculateScore((network)):-7.0 Epoch #97 train.getError():2087.0 Epoch #97 MazeScore().calculateScore((network)):-7.0 Epoch #98 train.getError():2359.0 Epoch #98 MazeScore().calculateScore((network)):30074.0 Epoch #99 train.getError():2359.0 Epoch #99 MazeScore().calculateScore((network)):30074.0 Epoch #100 train.getError():2359.0 Epoch #100 MazeScore().calculateScore((network)):30074.0

I think getError() and MazeScore().calculateScore() should have same results here. Can anyone tell me what can be reason for different results?

Thank you

lasha81 commented 9 years ago

When I added ((BasicEA) train).setThreadCount(1); It worked ok.

So I think there is a bug in multithreading.

jeffheaton commented 6 years ago

My thought is that this was an issue where the scoring function (which I see is custom) did not support multi-threading. CalculateScore.requireSingleThreaded() allows this to be specified. I am pretty sure that the Encog NEAT trainer works okay with multithreading if the score function also supports it. If anyone else runs into an issue with Encog NEAT multithreading and the score function is designed to support it, please create a new issue (with code to reproduce) and I will investigate.