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); }
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); }
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); }