1

我对 XOR 算子的 Elman 网络训练并没有停止,它运行了数百万次迭代。任何帮助将非常感激!

包 org.encog.example;

导入 org.encog.Encog;
导入 org.encog.engine.network.activation.ActivationSigmoid;
导入 org.encog.ml.train.MLTrain;
导入 org.encog.neural.data.NeuralDataSet;
导入 org.encog.neural.data.basic.BasicNeuralDataSet;
导入 org.encog.neural.networks.BasicNetwork;
导入 org.encog.neural.networks.training.propagation.back.Backpropagation;
导入 org.encog.neural.pattern.ElmanPattern;

公共类 XORRNN {

    // 4行2列
    公共静态双 XOR_INPUT[][] = { { 0.0, 0.0 }, { 1.0, 0.0 },
            { 0.0, 1.0 }, { 1.0, 1.0 } };

    // 4行1列
    公共静态双 XOR_IDEAL[][] = { { 0.0 }, { 1.0 }, { 1.0 }, { 0.0 } };

    公共静态无效主要(字符串[]参数){

        //创建Elman RNN
        ElmanPattern elmanPattern = new ElmanPattern();
        elmanPattern.setInputNeurons(2);
        elmanPattern.addHiddenLayer(4);
        elmanPattern.setOutputNeurons(1);
        elmanPattern.setActivationFunction(new ActivationSigmoid());
        BasicNetwork 网络 = (BasicNetwork) elmanPattern.generate();

        //读取训练数据
        NeuralDataSet trainingSet = new BasicNeuralDataSet(XOR_INPUT, XOR_IDEAL);

        //设置训练方法
        MLTrain train = new Backpropagation(network, trainingSet, 0.000001, 0.0);


        //训练
        整数时代 = 1;

        做{
            训练.迭代();          
            System.out.println("迭代:" + epoch + ",错误:" + train.getError());
            纪元++;
        }while(train.getError() > 0.01);

        //关闭
        Encog.getInstance().shutdown();
    }
}

4

1 回答 1

0

如果您想训练非时间序列的东西,请尝试使用前馈神经网络。使用 Elman 和仅 4 个训练集元素,您不会非常成功。如果您想了解如何为 Elman 构造 XOR 数据的示例,请参阅以下内容:

https://github.com/encog/encog-java-examples/blob/master/src/main/java/org/encog/examples/neural/recurrent/elman/ElmanXOR.java

于 2014-11-11T00:53:23.483 回答