Neuroph NEAT预览XOR不训练

时间:2016-03-25 15:03:44

标签: java neural-network

Neuroph发布了NEAT实施预览(https://sourceforge.net/projects/neuroph/files/NEAT-preview/)。我想尝试用它来创建一个XOR门(一个常见的尝试)。但由于某种原因,它不起作用。这是我使用的代码:

首先我创建了属性:

SimpleNeatParameters params = new SimpleNeatParameters();
params.setFitnessFunction(new Fitness());
params.setPopulationSize(150);
params.setMaximumFitness(16);
params.setMaximumGenerations(100);

健身给出了这样得分的双重值:

net.setInput(0, 0);
net.calculate();
fitness += (1 - net.getOutput().get(0)) * 4;

net.setInput(1, 0);
net.calculate();
fitness +=  net.getOutput().get(0) * 4;

等等。这个想法是,如果你做对了,你会获得更多,最多四个。

然后输入基因:

NeuronGene inputOne = new NeuronGene(NeuronType.INPUT, params);
NeuronGene inputTwo = new NeuronGene(NeuronType.INPUT, params);
NeuronGene output = new NeuronGene(NeuronType.OUTPUT, params);

然后告诉它进化:

Evolver e = Evolver.createNew(params, Arrays.asList(inputOne, inputTwo), Arrays.asList(output));
Organism best = e.evolve();

NeuralNetwork nn = params.getNeuralNetworkBuilder().createNeuralNetwork(best);

然后尝试了,我得到了这些结果:

0, 0: 0.6129870845620041
1, 0: 0.6492975506882983
0, 1: 0.6527754436728792
1, 1: 0.6530807065677073

那发生了什么事?我尝试增加人口,终端一代,但没有任何作用。我做错了吗?

1 个答案:

答案 0 :(得分:0)

我不是Neuroph的专家,但也许是其中之一:

  1. 您是否设置了选择器?

    NaturalSelectionOrganismSelector selector = new NaturalSelectionOrganismSelector();
    selector.setKillUnproductiveSpecies(true);
    params.setOrganismSelector(selector);
    
  2. 在示例xor测试中,它们对错误进行了平方。我不明白为什么会导致问题,但谁知道呢?

  3. 他们还会在每次调用健身功能时重置神经网络。