Exemplo n.º 1
0
        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;
            }
        }
Exemplo n.º 2
0
        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");
                            }
                        }
                    }
            }
        }