⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xor.java

📁 Practical AI in Java 人工智能编程
💻 JAVA
字号:
// 3/7/2004: note: someone asked for an XOR example...  -Markpublic class xor {    static float FALSE = 0.01f;    static float TRUE  = 0.99f;    static float[] in1 = {FALSE, FALSE};    static float[] in2 = {FALSE, TRUE};    static float[] in3 = {TRUE, FALSE};    static float[] in4 = {TRUE, TRUE};    static float[] out1 = {FALSE};    static float[] out2 = {TRUE};    static float[] out3 = {TRUE};    static float[] out4 = {FALSE};    static float[] test1 = {FALSE, TRUE};    static float[] test2 = {TRUE, FALSE};    static float[] test3 = {TRUE, TRUE};    public static void main(String[] args) {        Neural_1H nn = new Neural_1H(2, 3, 1);        nn.addTrainingExample(in1, out1);        nn.addTrainingExample(in3, out3);        nn.addTrainingExample(in2, out2);        nn.addTrainingExample(in4, out4);        // loop until we get a low enough error:        try_again: for (int iter = 0; iter < 500; iter++) {            nn.randomizeWeights();            System.out.println("\nStarting with a new random set of weights (iter="+iter+")");            float weightJiggleFactor = 0.15f;            double learningRate = 0.4; // 0.15;            float error = 0;            for (long i = 0; i < 2000000; i++) {                nn.jiggleWeights(weightJiggleFactor);                weightJiggleFactor *= 0.9999;                nn.setLearningRate((float) learningRate);                learningRate *= 0.999995;                if (learningRate < 0.08f) learningRate = 0.08f;                if (weightJiggleFactor < 0.0002f) weightJiggleFactor = 0.02f;                error += nn.train();                //if (error > 0.25f) weightJiggleFactor = 0.5f;                //if (error > 0.31f) nn.randomizeWeights();                if (i>0 && i % 100 == 0) {                    error /= 100;                    //System.out.println("cycle " + i + " error is " + error + ", learningRate=" + learningRate + ", weightJiggleFactor=" + weightJiggleFactor);                    // test to see if this set of initial random weights is                    // producing poor results - if so, bail and start with a new set                    // of weights:                    if (i > 30000 & error > 0.38f) continue try_again;                    if (i > 90000 & error > 0.28f) continue try_again;                    if (i >150000 & error > 0.21f) continue try_again;                    if (i >350000 & error > 0.18f) continue try_again;                    // if the error is low enough, simply stop training now:                    if (error < 0.1)  break try_again;                    error = 0;                }            }        }        test_recall(nn, test1);        test_recall(nn, test2);        test_recall(nn, test3);    }    public static void test_recall(Neural_1H nn, float[] inputs) {        float[] results = nn.recall(inputs);        System.out.print("Test case: ");        for (int i = 0; i < inputs.length; i++) System.out.print(pp(inputs[i]) + " ");        System.out.print(" results: ");        for (int i = 0; i < results.length; i++) System.out.print(pp(results[i]) + " ");        System.out.println();    }    public static String pp(float x) {        String s = new String("" + x + "00");        int index = s.indexOf(".");        if (index > -1) s = s.substring(0, index + 3);        if (s.startsWith("-") == false) s = " " + s;        return s;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -