public void ShouldTrainForXor()
        {
            var brain = new NeuralNetwork(2, new int[3] {
                5, 5, 5
            }, 1, ActivationFunction.LogSigmoid);
            var deepLearning = new DeepLearning(brain, 0.00001);

            var inputs = new Matrix[4];

            inputs[0]       = new Matrix(2, 1);
            inputs[0][0, 0] = 0;
            inputs[0][1, 0] = 0;

            inputs[1]       = new Matrix(2, 1);
            inputs[1][0, 0] = 1;
            inputs[1][1, 0] = 0;

            inputs[2]       = new Matrix(2, 1);
            inputs[2][0, 0] = 0;
            inputs[2][1, 0] = 1;

            inputs[3]       = new Matrix(2, 1);
            inputs[3][0, 0] = 1;
            inputs[3][1, 0] = 1;

            var targets = new Matrix[4];

            targets[0]       = new Matrix(1, 1);
            targets[0][0, 0] = 0;

            targets[1]       = new Matrix(1, 1);
            targets[1][0, 0] = 1;

            targets[2]       = new Matrix(1, 1);
            targets[2][0, 0] = 1;

            targets[3]       = new Matrix(1, 1);
            targets[3][0, 0] = 0;

            var rand = new Random();

            for (int i = 0; i < 10000; i++)
            {
                var t = rand.Next(4);
                deepLearning.Train(inputs[t], targets[t]);
            }

            var i0 = brain.Prediction(inputs[0]); // epected 0
            var i2 = brain.Prediction(inputs[1]); // expected 1
            var i3 = brain.Prediction(inputs[2]); //  expected 1
            var i4 = brain.Prediction(inputs[3]); //expected 0

            Assert.IsFalse(false);
        }
        private void ImageCallBack_2(IntPtr m_BufForDriver, ref MyCamera.MV_FRAME_OUT_INFO_EX pFrameInfo, IntPtr pUser)
        {
            MyCamera.MVCC_INTVALUE stParam = new MyCamera.MVCC_INTVALUE();
            int nRet = cameraArr1[0].MV_CC_GetIntValue_NET("PayloadSize", ref stParam);

            if (MyCamera.MV_OK != nRet)
            {
                MessageBox.Show("Get PayloadSize failed", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            UInt32 nPayloadSize = stParam.nCurValue;

            if (nPayloadSize > m_nBufSizeForDriver)
            {
                if (m_BufForDriver != IntPtr.Zero)
                {
                    Marshal.Release(m_BufForDriver);
                }
                m_nBufSizeForDriver = nPayloadSize;
                m_BufForDriver      = Marshal.AllocHGlobal((Int32)m_nBufSizeForDriver);
            }
            if (m_BufForDriver == IntPtr.Zero)
            {
                MessageBox.Show("采集失败,请重新连接设备", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            // 将海康数据类型转为Mat
            nRet = cameraArr1[0].MV_CC_GetOneFrameTimeout_NET(m_BufForDriver, nPayloadSize, ref pFrameInfo, 1000); // m_BufForDriver为图像数据接收指针
            //pTemp = m_BufForDriver;
            byte[] byteImage = new byte[pFrameInfo.nHeight * pFrameInfo.nWidth];
            Marshal.Copy(m_BufForDriver, byteImage, 0, pFrameInfo.nHeight * pFrameInfo.nWidth);
            Mat matImage = new Mat(pFrameInfo.nHeight, pFrameInfo.nWidth, MatType.CV_8UC1, byteImage);
            // 单通道图像转为三通道
            Mat matImageNew = new Mat();

            Cv2.CvtColor(matImage, matImageNew, ColorConversionCodes.GRAY2RGB);
            Bitmap bitmap = matImageNew.ToBitmap();  // Mat转为Bitmap
                                                     // 是否进行推理
            DeepLearning deepLearning = new DeepLearning();

            if (isInference2)
            {
                bitmap = deepLearning.Inference(model2, modelType, bitmap);
            }
            if (pictureBox2.InvokeRequired)  // 当一个控件的InvokeRequired属性值为真时,说明有一个创建它以外的线程想访问它
            {
                UpdateUI update = delegate { pictureBox2.Image = bitmap; };
                pictureBox2.BeginInvoke(update);
            }
            else
            {
                pictureBox2.Image = bitmap;
            }
        }
Exemple #3
0
 static void Main(string[] args)
 {
     try
     {
         ConsoleCopy.Create();
         var sw = Stopwatch.StartNew();
         DeepLearning.Test();
         sw.Stop();
         Console.WriteLine($"done! {sw.Elapsed}");
     }
     catch (Exception e)
     {
         Console.WriteLine(e);
     }
     Console.Read();
 }
        public void ShouldTrainForMnist()
        {
            // training data



            Matrix[] trainingSet;
            Matrix[] targetTraining;
            GetDataFromMnsit(@".\Mnist dataSet\mnistyTrain.csv", out trainingSet, out targetTraining);


            Matrix[] testSet;
            Matrix[] testTraining;
            GetDataFromMnsit(@".\Mnist dataSet\mnistTest.csv", out testSet, out testTraining);

            var brain = new NeuralNetwork(trainingSet[0].Rows, new int[1] {
                60
            }, 10, ActivationFunction.LogSigmoid);
            // brain = NeuralNetwork.Import(@"c:\", "Mnisty.json");
            var deepLearning = new DeepLearning(brain, 0.001);


            var MaxAccurcy = calculateAccurcy(testSet, testTraining, brain);


            System.Diagnostics.Debug.WriteLine("initial accurcy: " + MaxAccurcy);
            for (int j = 0; j < 10000; j++)
            {
                deepLearning.BulkTraining(trainingSet, targetTraining);


                var Currentaccurcy = calculateAccurcy(testSet, testTraining, brain);

                if (Currentaccurcy > MaxAccurcy)
                {
                    MaxAccurcy = Currentaccurcy;
                    brain.Export(@"c:\", "Mnisty.json");
                }


                System.Diagnostics.Debug.WriteLine("cycle " + j + " current " + Currentaccurcy + " max accurcy " + MaxAccurcy);
            }

            Assert.IsFalse(false);
        }
        public void ShouldExportImportSameBrain()
        {
            Matrix[] testSet;
            Matrix[] testTraining;
            GetDataFromMnsit(@".\Mnist dataSet\mnistTest.csv", out testSet, out testTraining);

            var brain = new NeuralNetwork(testSet[0].Rows, new int[1] {
                60
            }, 10, ActivationFunction.LogSigmoid);

            brain.Export(@"c:\", "testttt");
            var deepLearning = new DeepLearning(brain, 0.001);

            var acc1 = calculateAccurcy(testSet, testTraining, brain);
            var tmp  = NeuralNetwork.Import(@"c:\", "testttt");
            var acc2 = calculateAccurcy(testSet, testTraining, tmp);

            Assert.AreEqual(acc1, acc2);
        }
 private void OnImageGrabbed_2(Object sender, ImageGrabbedEventArgs e)
 {
     try
     {
         IGrabResult grabResult = e.GrabResult;
         if (grabResult.IsValid)
         {
             // 四通道RGBA
             Bitmap bitmap = new Bitmap(grabResult.Width, grabResult.Height, PixelFormat.Format32bppRgb);
             // 锁定位图的位
             BitmapData bmpData = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadWrite, bitmap.PixelFormat);
             // 将指针放置到位图的缓冲区
             converter.OutputPixelFormat = PixelType.BGRA8packed;
             IntPtr ptrBmp = bmpData.Scan0;
             converter.Convert(ptrBmp, bmpData.Stride * bitmap.Height, grabResult);
             bitmap.UnlockBits(bmpData);
             DeepLearning deepLearning = new DeepLearning();
             if (isInference2)
             {
                 bitmap = deepLearning.Inference(model2, modelType, bitmap);
             }
             if (pictureBox2.InvokeRequired)  // 当一个控件的InvokeRequired属性值为真时,说明有一个创建它以外的线程想访问它
             {
                 UpdateUI update = delegate { pictureBox2.Image = bitmap; };
                 pictureBox2.BeginInvoke(update);
             }
             else
             {
                 pictureBox2.Image = bitmap;
             }
         }
     }
     catch (Exception ex)
     {
         MessageBox.Show(string.Format("CAM:{0}!\n{1}", "CAM2", ex.Message));
     }
     finally
     {
         e.DisposeGrabResultIfClone();
     }
 }
Exemple #7
0
        static void Main(string[] args)
        {
            int nInput           = 2;
            int nOutput          = 1;
            int neuronsPerLayers = 10;
            int nLayers          = 3;

            DeepLearning slp = new DeepLearning(nInput, neuronsPerLayers, nOutput, nLayers);
            //SingleLayerPerceptron slp = new SingleLayerPerceptron(nInput, neuronsPerLayers, nOutput);

            var nPoints = 10000;

            for (int i = 0; i < nPoints; i++)
            {
                Random random = new Random(Guid.NewGuid().GetHashCode());
                int    value1 = random.Next() % 2;
                random = new Random(Guid.NewGuid().GetHashCode());
                int value2 = random.Next() % 2;
                random = new Random(Guid.NewGuid().GetHashCode());
                int value3 = random.Next() % 2;

                //int xor = XOR(value1, value2);
                int correctValue = ComplexeBoolMethod(value1, value2, value3);

                slp.Train(new List <double>()
                {
                    value1, value2
                }, new List <double>()
                {
                    correctValue
                });
                var percent = Math.Round(i * 100.0 / nPoints, 4);
                //if (percent == (int)percent)
                //{
                //	Console.Clear();
                //	Console.WriteLine(percent);
                //}
            }

            double n         = 0;
            int    nTestCase = 200;

            for (int i = 0; i < nTestCase; i++)
            {
                Random random = new Random(Guid.NewGuid().GetHashCode());
                int    value1 = random.Next() % 2;
                random = new Random(Guid.NewGuid().GetHashCode());
                int value2 = random.Next() % 2;
                random = new Random(Guid.NewGuid().GetHashCode());
                int value3 = random.Next() % 2;

                //int xor = XOR(value1, value2);
                int correctValue = ComplexeBoolMethod(value1, value2, value3);

                var guess = slp.Predict(new List <double>()
                {
                    value1, value2
                });
                double result  = guess[0] > 0.5 ? 1 : 0;
                bool   correct = result == correctValue;
                Console.WriteLine("correct value : " + correctValue);
                Console.WriteLine("guess : " + guess[0]);
                Console.WriteLine("--");
                if (correct)
                {
                    n++;
                }
            }
            var path = "C:\\Users\\Boudart Loic\\source\\repos\\MachineLearning\\MachineLearning\\brain.json";

            slp.Save(path);
            slp.Load(path);
            //to debug
            {
                Random random = new Random(Guid.NewGuid().GetHashCode());
                int    value1 = random.Next() % 2;
                random = new Random(Guid.NewGuid().GetHashCode());
                int value2 = random.Next() % 2;

                int xor = XOR(value1, value2);

                slp.Train(new List <double>()
                {
                    value1, value2
                }, new List <double>()
                {
                    xor
                });
                //if (percent == (int)percent)
                //{
                //	Console.Clear();
                //	Console.WriteLine(percent);
                //}
            }
            Console.WriteLine(n / nTestCase);
            Console.Read();
        }
Exemple #8
0
 public static void Learning(int from, int to)
 {
     DeepLearning.PrepareData($@"E:\projects\MonkeyOthello\tests\", from, to);
     DeepLearning.TrainAll(from, to);
     DeepLearning.TestAll(from, to);
 }