Пример #1
0
        private void buttonGenerate_Click(object sender, EventArgs e)
        {
            if (_data == null)
            {
                XtraMessageBox.Show("There is no data create model!", "Uh Oh!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }

            var model = new PerceptronModel <Student>();

            _classifier = model.Generate(_data);
            XtraMessageBox.Show("Done!", "Success!", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
Пример #2
0
        public void Run(int firstHiddenLayerSize, int secondHiddenLayerSize, int iterations, float learningRate, int batchSize)
        {
            var digitReader = new HandwrittenDigitReader();

            var trainDigits = digitReader.Iterate(
                MnistFiles.FindByType(MNISTFileType.TrainImages).FileName,
                MnistFiles.FindByType(MNISTFileType.TrainLabels).FileName);

            var testDigits = digitReader.Iterate(
                MnistFiles.FindByType(MNISTFileType.TestImages).FileName,
                MnistFiles.FindByType(MNISTFileType.TestLabels).FileName);

            var trainingData = trainDigits.Select(im => im.ToDataPoint());
            var testData     = testDigits.Select(im => im.ToDataPoint());

            var cancellationToken = new CancellationTokenSource();

            _model = new PerceptronModel(
                HandwrittenDigit.ImageSize * HandwrittenDigit.ImageSize,
                firstHiddenLayerSize,
                secondHiddenLayerSize,
                10);

            _classifier = new PerceptronClassifier(
                _model,
                learningRate,
                batchSize);


            var watch = Stopwatch.StartNew();

            _classifier.IterationComplete += j =>
            {
                //Console.WriteLine($"Epoch {j}: {MNISTEvaulate(net, testData)} / {testData.Count}");
                OnLog(
                    $"Iteration #{j} has completed: {EvaluateClassifier(_classifier, testData)} / {testData.Count()} [{watch.ElapsedMilliseconds} ms]");
                watch = Stopwatch.StartNew();

                if (j == iterations)
                {
                    cancellationToken.Cancel();
                }

                EpochComplete?.Invoke(j);
            };

            _classifier.Train(trainingData, cancellationToken.Token);
        }
Пример #3
0
        public DemoRunner()
        {
            MnistFiles = new MNISTDatabase();

            var defaultFile = new FileInfo("network.xml");

            if (defaultFile.Exists)
            {
                var xml = defaultFile.OpenRead();
                using (var textReader = new StreamReader(xml))
                {
                    var serializer = new PerceptronModelSerializer();
                    _model = serializer.Deserialize(textReader);
                }
            }
            else
            {
                _model = new PerceptronModel(30);
            }

            _classifier = new PerceptronClassifier(_model, 2, 50);
        }
        private Guid ProcessSave(CNN network, string name, NetworkContext context)
        {
            var cnnModel = new CnnModel
            {
                CnnModelId = Guid.NewGuid()
            };
            var layers     = new List <CnnLayer>();
            var cnnWeights = new List <CnnWeights>();

            for (int i = 0; i < network.LayersCount; i++)
            {
                if (network.Layers[i] is ConvolutionalLayer)
                {
                    var cnnLayer = network.Layers[i] as ConvolutionalLayer;
                    var layer    = new CnnLayer
                    {
                        CnnLayerId         = Guid.NewGuid(),
                        PositionIn         = i,
                        KernelHeight       = cnnLayer.KernelSize,
                        KernelWidth        = cnnLayer.KernelSize,
                        KernelsCount       = cnnLayer.KernelsCount,
                        FeatureMapsCountIn = cnnLayer.KernelDepth,
                        LayerType          = (byte)LayerType.CovolutionalLayer,
                        Model = cnnModel
                    };

                    var weights = new CnnWeights
                    {
                        CnnWeightsId = Guid.NewGuid(),
                        Layer        = layer,
                        LayerId      = layer.CnnLayerId
                    };

                    var w       = string.Empty;
                    var builder = new StringBuilder(String.Empty);
                    for (int j = 0; j < cnnLayer.KernelsCount; ++j)
                    {
                        for (int k = 0; k < cnnLayer.KernelDepth; ++k)
                        {
                            for (int a = 0; a < cnnLayer.Kernels[j][k].Length; ++a)
                            {
                                for (int b = 0; b < cnnLayer.Kernels[j][k][a].Length; ++b)
                                {
                                    builder.Append(cnnLayer.Kernels[j][k][a][b] + ";");
                                }
                            }
                        }
                    }

                    w = builder.ToString();
                    weights.Weights = w;
                    cnnWeights.Add(weights);

                    layer.Weights = weights;

                    layers.Add(layer);
                }
                else if (network.Layers[i] is PollingLayer)
                {
                    var cnnLayer = network.Layers[i] as PollingLayer;
                    var layer    = new CnnLayer
                    {
                        CnnLayerId   = Guid.NewGuid(),
                        PositionIn   = i,
                        KernelHeight = cnnLayer.KernelSize,
                        KernelWidth  = cnnLayer.KernelSize,
                        LayerType    = (byte)LayerType.PoolingLayer,
                        Model        = cnnModel
                    };

                    layers.Add(layer);
                }
                else
                {
                    var cnnLayer = network.Layers[i] as ReLuLayer;
                    var layer    = new CnnLayer
                    {
                        CnnLayerId   = Guid.NewGuid(),
                        PositionIn   = i,
                        KernelHeight = cnnLayer.KernelSize,
                        KernelWidth  = cnnLayer.KernelSize,
                        LayerType    = (byte)LayerType.ReluLayer,
                        Model        = cnnModel
                    };

                    layers.Add(layer);
                }
            }

            var l = new CnnLayer
            {
                CnnLayerId   = Guid.NewGuid(),
                KernelHeight = network.FlattenLayer.KernelSize,
                KernelWidth  = network.FlattenLayer.KernelSize,
                LayerType    = (byte)LayerType.FlattenLayer,
                Model        = cnnModel
            };

            layers.Add(l);

            cnnModel.Layers = layers;

            var perceptronModel = new PerceptronModel
            {
                PerceptronModelId = Guid.NewGuid()
            };
            var percLayers  = new List <PerceptronLayer>();
            var percWeights = new List <PerceptronWeights>();

            for (var i = 0; i < network.Perceptron.LayersCount; ++i)
            {
                var layer = network.Perceptron.Layers[i];

                var perLayer = new PerceptronLayer
                {
                    PerceptronLayerId = Guid.NewGuid(),
                    NeuronsCount      = layer.NeuronsCount,
                    PositionIn        = i,
                    Perceptron        = perceptronModel
                };

                var weights = new PerceptronWeights
                {
                    PerceptronWeightsId = perLayer.PerceptronLayerId,
                    Height = layer.WeightRowsCount,
                    Width  = layer.WeightColumnsCount
                };

                string w       = String.Empty;
                var    builder = new StringBuilder(String.Empty);
                for (int a = 0; a < layer.Weights.Length; ++a)
                {
                    for (int b = 0; b < layer.Weights[a].Length; ++b)
                    {
                        builder.Append(layer.Weights[a][b] + ";");
                    }
                }

                w = builder.ToString();

                weights.Weights = w;
                percWeights.Add(weights);

                percLayers.Add(perLayer);
            }

            perceptronModel.Layers = percLayers;

            //save
            var networkModel = new NetworkModel
            {
                NetworkModelId = Guid.NewGuid(),
                Perceptron     = perceptronModel,
                PerceptronId   = perceptronModel.PerceptronModelId,
                Cnn            = cnnModel,
                CnnId          = cnnModel.CnnModelId,
                Name           = name
            };

            cnnModel.NetworkModel   = networkModel;
            cnnModel.NetworkModelId = networkModel.NetworkModelId;

            perceptronModel.NetworkModel   = networkModel;
            perceptronModel.NetworkModelId = networkModel.NetworkModelId;

            context.NetworkModels.Add(networkModel);

            context.CnnLayers.AddRange(layers);
            context.CnnWeightsSet.AddRange(cnnWeights);
            context.CnnModels.Add(cnnModel);

            context.PerceptronLayers.AddRange(percLayers);
            context.PerceptronWeights.AddRange(percWeights);
            context.PerceptronModels.Add(perceptronModel);


            context.SaveChanges();

            return(networkModel.NetworkModelId);
        }