private void Load(string filePath) { FileInfo fileInfo = new FileInfo(filePath); if (fileInfo.Exists) { Stream stream = File.Open(filePath, FileMode.Open, FileAccess.Read); BinaryFormatter formatter = new BinaryFormatter(); network = (CNNetwork)formatter.Deserialize(stream); stream.Close(); stream = null; formatter = null; } }
private void Train() { int outputNodes = 10; double learningRate = 0.1; int bias = 1; CNNetwork.ECNNLayer[] layers = new CNNetwork.ECNNLayer[] { CNNetwork.ECNNLayer.ConvLayer, CNNetwork.ECNNLayer.PoolingLayer, CNNetwork.ECNNLayer.ConvLayer, CNNetwork.ECNNLayer.PoolingLayer, //CNNetwork.ECNNLayer.ConvLayer }; int[] strides = new int[] { 1, 1, 1 }; Size[] sizes = new Size[] { new Size(3, 3), new Size(3, 3), new Size(3, 3) }; int[] kernelsCount = new int[] { 4, 4 }; int[] layersNode = new int[] { 100, 10 }; if (network == null) { network = new CNNetwork(new Size(30, 30), layers.Length, layers, strides, sizes, kernelsCount, layersNode, learningRate, bias); Console.WriteLine("Not exist"); Console.ReadKey(); } else { Console.WriteLine("Exist"); Console.ReadKey(); } int count = 0; for (int appch = 0; appch < 1; appch++) { using (FileStream file = new FileStream("mnist_train.csv", FileMode.Open, FileAccess.Read)) using (StreamReader reader = new StreamReader(file)) { string record = null; while ((record = reader.ReadLine()) != null) { string[] all_values = record.Split(','); double[] inputs = new double[all_values.Length - 1]; for (int i = 1; i < all_values.Length; i++) { inputs[i - 1] = (double.Parse(all_values[i]) / 255 * 0.99) + 0.01; } double[] targets = new double[outputNodes]; for (int i = 0; i < outputNodes; i++) { targets[i] = 0.01; } targets[int.Parse(all_values[0])] = 0.99; Mat <double> image = new Mat <double>(28, 28, inputs); image = image.Padding(1); double error = network.Train(image, targets); Console.WriteLine("[{0}] Sum of Error : {1}", ++count, error); if (count % 10000 == 0) { Save("CNN_" + count.ToString() + ".info"); } } } } }