Exemplo n.º 1
0
        //https://blog.csdn.net/red_stone1/article/details/80491895
        public PerceptronLearning(ActivationNetwork network)
        {
            if (network.Layers.Length != 1)
            {
                throw new ArgumentException("无效的神经网络,它应该只有一层。");
            }

            _network = network;
        }
Exemplo n.º 2
0
 public SlowLearning(ActivationNetwork network)
 {
     _network = network;
 }
Exemplo n.º 3
0
        static void Main(string[] args)
        {
            double[][] inputs  = new double[4][];
            double[][] outputs = new double[4][];

            //(0,0);(0,1);(1,0)
            inputs[0] = new double[] { 0, 0 };
            inputs[1] = new double[] { 0, 1 };
            inputs[2] = new double[] { 1, 0 };

            outputs[0] = new double[] { 0 };
            outputs[1] = new double[] { 0 };
            outputs[2] = new double[] { 0 };

            //(1,1)
            inputs[3]  = new double[] { 1, 1 };
            outputs[3] = new double[] { 1 };


            ActivationNetwork network = new ActivationNetwork(
                new ThresholdFunction(), 2, 1);

            SlowLearning teacher = new SlowLearning(network);

            int iteration = 1;

            while (true)
            {
                double error = teacher.RunEpoch(inputs, outputs);
                Console.WriteLine($"迭代次数:{iteration},总体误差:{error} ");

                if (error == 0)
                {
                    break;
                }
                iteration++;
            }

            Console.WriteLine();



            //double[][] inputs = new double[4][];
            //double[][] outputs = new double[4][];

            //(0, 0); (0, 1); (1, 0)
            //inputs[0] = new double[] { 0, 0 };
            //inputs[1] = new double[] { 0, 1 };
            //inputs[2] = new double[] { 1, 0 };

            //outputs[0] = new double[] { 0 };
            //outputs[1] = new double[] { 0 };
            //outputs[2] = new double[] { 0 };

            //(1, 1)
            //inputs[3] = new double[] { 1, 1 };
            //outputs[3] = new double[] { 1 };


            //ActivationNetwork network = new ActivationNetwork(
            //    new ThresholdFunction(), 2, 1);

            //PerceptronLearning teacher = new PerceptronLearning(network);
            //teacher.LearningRate = 0.1;

            //int iteration = 1;
            //while (true)
            //{
            //    double error = teacher.RunEpoch(inputs, outputs);
            //    Console.WriteLine(@"迭代次数:{0},总体误差:{1}", iteration, error);

            //    if (error == 0)
            //        break;
            //    iteration++;
            //}

            //Console.WriteLine();

            //ActivationNeuron neuron = network.Layers[0].Neurons[0] as ActivationNeuron;

            //Console.WriteLine(@"Weight 1:{0}", neuron.Weights[0].ToString("F3"));
            //Console.WriteLine(@"Weight 2:{0}", neuron.Weights[1].ToString("F3"));
            //Console.WriteLine(@"Threshold:{0}", neuron.Threshold.ToString("F3"));

            //Console.Read();



            //double[][] inputs = new double[4][];
            //double[][] outputs = new double[4][];

            ////(0,0)
            //inputs[0] = new double[] { 0, 0 };
            //outputs[0] = new double[] { 0 };

            ////(1,1);(0,1);(1,0)
            //inputs[1] = new double[] { 0, 1 };
            //inputs[2] = new double[] { 1, 0 };
            //inputs[3] = new double[] { 1, 1 };

            //outputs[1] = new double[] { 1 };
            //outputs[2] = new double[] { 1 };
            //outputs[3] = new double[] { 1 };


            //ActivationNetwork network = new ActivationNetwork(new ThresholdFunction(), 2, 1);

            //SlowLearning teacher = new SlowLearning(network);

            //int iteration = 1;
            //while (true)
            //{
            //    double error = teacher.RunEpoch(inputs, outputs);
            //    Console.WriteLine(@"迭代次数:{0},总体误差:{1}", iteration, error);

            //    if (error == 0)
            //        break;
            //    iteration++;
            //}

            //Console.WriteLine();
            //ActivationNeuron neuron = network.Layers[0].Neurons[0] as ActivationNeuron;

            //Console.WriteLine(@"Weight 1:{0}", neuron.Weights[0].ToString("F3"));
            //Console.WriteLine(@"Weight 2:{0}", neuron.Weights[1].ToString("F3"));
            //Console.WriteLine(@"Threshold:{0}", neuron.Threshold.ToString("F3"));



            //double[][] inputs = new double[4][];
            //double[][] outputs = new double[4][];

            ////(0,0)
            //inputs[0] = new double[] { 0, 0 };
            //outputs[0] = new double[] { 0 };

            ////(1,1);(0,1);(1,0)
            //inputs[1] = new double[] { 0, 1 };
            //inputs[2] = new double[] { 1, 0 };
            //inputs[3] = new double[] { 1, 1 };

            //outputs[1] = new double[] { 1 };
            //outputs[2] = new double[] { 1 };
            //outputs[3] = new double[] { 1 };


            //ActivationNetwork network = new ActivationNetwork(
            //    new ThresholdFunction(), 2, 1);

            //PerceptronLearning teacher = new PerceptronLearning(network);
            //teacher.LearningRate = 0.1;

            //int iteration = 1;
            //while (true)
            //{
            //    double error = teacher.RunEpoch(inputs, outputs);
            //    Console.WriteLine(@"迭代次数:{0},总体误差:{1}", iteration, error);

            //    if (error == 0)
            //        break;
            //    iteration++;
            //}

            //Console.WriteLine();
            //ActivationNeuron neuron = network.Layers[0].Neurons[0] as ActivationNeuron;

            //Console.WriteLine(@"Weight 1:{0}", neuron.Weights[0].ToString("F3"));
            //Console.WriteLine(@"Weight 2:{0}", neuron.Weights[1].ToString("F3"));
            //Console.WriteLine(@"Threshold:{0}", neuron.Threshold.ToString("F3"));



            //double[][] inputs = new double[15][];
            //double[][] outputs = new double[15][];

            ////(0.1,0.1);(0.2,0.3);(0.3,0.4);(0.1,0.3);(0.2,0.5)
            //inputs[0] = new double[] { 0.1, 0.1 };
            //inputs[1] = new double[] { 0.2, 0.3 };
            //inputs[2] = new double[] { 0.3, 0.4 };
            //inputs[3] = new double[] { 0.1, 0.3 };
            //inputs[4] = new double[] { 0.2, 0.5 };

            //outputs[0] = new double[] { 1, 0, 0 };
            //outputs[1] = new double[] { 1, 0, 0 };
            //outputs[2] = new double[] { 1, 0, 0 };
            //outputs[3] = new double[] { 1, 0, 0 };
            //outputs[4] = new double[] { 1, 0, 0 };

            ////(0.1,1.0);(0.2,1.1);(0.3,0.9);(0.4,0.8);(0.2,0.9)
            //inputs[5] = new double[] { 0.1, 1.0 };
            //inputs[6] = new double[] { 0.2, 1.1 };
            //inputs[7] = new double[] { 0.3, 0.9 };
            //inputs[8] = new double[] { 0.4, 0.8 };
            //inputs[9] = new double[] { 0.2, 0.9 };

            //outputs[5] = new double[] { 0, 1, 0 };
            //outputs[6] = new double[] { 0, 1, 0 };
            //outputs[7] = new double[] { 0, 1, 0 };
            //outputs[8] = new double[] { 0, 1, 0 };
            //outputs[9] = new double[] { 0, 1, 0 };

            ////(1.0,0.4);(0.9,0.5);(0.8,0.6);(0.9,0.4);(1.0,0.5)
            //inputs[10] = new double[] { 1.0, 0.4 };
            //inputs[11] = new double[] { 0.9, 0.5 };
            //inputs[12] = new double[] { 0.8, 0.6 };
            //inputs[13] = new double[] { 0.9, 0.4 };
            //inputs[14] = new double[] { 1.0, 0.5 };

            //outputs[10] = new double[] { 0, 0, 1 };
            //outputs[11] = new double[] { 0, 0, 1 };
            //outputs[12] = new double[] { 0, 0, 1 };
            //outputs[13] = new double[] { 0, 0, 1 };
            //outputs[14] = new double[] { 0, 0, 1 };

            //ActivationNetwork network = new ActivationNetwork(new ThresholdFunction(), 2, 3);

            //SlowLearning teacher = new SlowLearning(network);

            //int iteration = 1;

            //while (true)
            //{
            //    double error = teacher.RunEpoch(inputs, outputs);
            //    Console.WriteLine(@"迭代次数:{0},总体误差:{1}", iteration, error);

            //    if (error == 0)
            //        break;
            //    iteration++;
            //}



            //double[][] inputs = new double[15][];
            //double[][] outputs = new double[15][];

            ////(0.1,0.1);(0.2,0.3);(0.3,0.4);(0.1,0.3);(0.2,0.5)
            //inputs[0] = new double[] { 0.1, 0.1 };
            //inputs[1] = new double[] { 0.2, 0.3 };
            //inputs[2] = new double[] { 0.3, 0.4 };
            //inputs[3] = new double[] { 0.1, 0.3 };
            //inputs[4] = new double[] { 0.2, 0.5 };

            //outputs[0] = new double[] { 1, 0, 0 };
            //outputs[1] = new double[] { 1, 0, 0 };
            //outputs[2] = new double[] { 1, 0, 0 };
            //outputs[3] = new double[] { 1, 0, 0 };
            //outputs[4] = new double[] { 1, 0, 0 };

            ////(0.1,1.0);(0.2,1.1);(0.3,0.9);(0.4,0.8);(0.2,0.9)
            //inputs[5] = new double[] { 0.1, 1.0 };
            //inputs[6] = new double[] { 0.2, 1.1 };
            //inputs[7] = new double[] { 0.3, 0.9 };
            //inputs[8] = new double[] { 0.4, 0.8 };
            //inputs[9] = new double[] { 0.2, 0.9 };

            //outputs[5] = new double[] { 0, 1, 0 };
            //outputs[6] = new double[] { 0, 1, 0 };
            //outputs[7] = new double[] { 0, 1, 0 };
            //outputs[8] = new double[] { 0, 1, 0 };
            //outputs[9] = new double[] { 0, 1, 0 };

            ////(1.0,0.4);(0.9,0.5);(0.8,0.6);(0.9,0.4);(1.0,0.5)
            //inputs[10] = new double[] { 1.0, 0.4 };
            //inputs[11] = new double[] { 0.9, 0.5 };
            //inputs[12] = new double[] { 0.8, 0.6 };
            //inputs[13] = new double[] { 0.9, 0.4 };
            //inputs[14] = new double[] { 1.0, 0.5 };

            //outputs[10] = new double[] { 0, 0, 1 };
            //outputs[11] = new double[] { 0, 0, 1 };
            //outputs[12] = new double[] { 0, 0, 1 };
            //outputs[13] = new double[] { 0, 0, 1 };
            //outputs[14] = new double[] { 0, 0, 1 };

            //ActivationNetwork network = new ActivationNetwork(new ThresholdFunction(), 2, 3);

            //PerceptronLearning teacher = new PerceptronLearning(network);
            //teacher.LearningRate = 0.1;

            //int iteration = 1;

            //while (true)
            //{
            //    double error = teacher.RunEpoch(inputs, outputs);
            //    Console.WriteLine(@"迭代次数:{0},总体误差:{1}", iteration, error);

            //    if (error == 0)
            //        break;
            //    iteration++;
            //}


            Console.Read();
        }