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; } }
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(); } }
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(); }
public static void Learning(int from, int to) { DeepLearning.PrepareData($@"E:\projects\MonkeyOthello\tests\", from, to); DeepLearning.TrainAll(from, to); DeepLearning.TestAll(from, to); }