public void SaveNeuralNet(DrinksSelfOrganizingMap drinksSelfOrganizingMap, string filename) { using (XmlWriter writer = XmlWriter.Create(filename)) { writer.WriteStartDocument(); writer.WriteStartElement("NeuralNet"); writer.WriteStartElement("Meta"); writer.WriteElementString("Width", drinksSelfOrganizingMap.NeuralMapWidth.ToString()); writer.WriteElementString("Height", drinksSelfOrganizingMap.NeuralMapHeight.ToString()); writer.WriteElementString("DistanceBetweenNeurons", drinksSelfOrganizingMap.DistanceBetweenNeurons.ToString()); writer.WriteElementString("VectorQuantizationError", drinksSelfOrganizingMap.VectorQuantizationError.ToString()); writer.WriteElementString("VectorQuantizationErrorStandardDeviation", drinksSelfOrganizingMap.VectorQuantizationErrorStandardDeviation.ToString()); writer.WriteEndElement(); writer.WriteStartElement("Data"); StringBuilder sb = new StringBuilder(); foreach (Node node in drinksSelfOrganizingMap.NeuralNet) { writer.WriteStartElement("Node"); writer.WriteElementString("DrinkID", node.DrinkID.ToString()); writer.WriteElementString("X", node.X.ToString()); writer.WriteElementString("Y", node.Y.ToString()); sb.Clear(); for (int i = 0; i < node.Weights.Length - 1; i++) { sb.Append(node.Weights[i]); sb.Append(";"); } sb.Append(node.Weights[node.Weights.Length - 1]); writer.WriteElementString("Weights", sb.ToString()); writer.WriteEndElement(); } writer.WriteEndElement(); writer.WriteEndElement(); writer.WriteEndDocument(); } }
public Image GetRender(DrinksSelfOrganizingMap drinksMap) { Bitmap render = new Bitmap((int)(drinksMap.NeuralMapWidth * drinksMap.DistanceBetweenNeurons * SCALE_FACTOR), (int)(drinksMap.NeuralMapHeight * drinksMap.DistanceBetweenNeurons * SCALE_FACTOR)); using (Graphics g = Graphics.FromImage(render)) { g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit; g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; g.FillRectangle(Brushes.WhiteSmoke, 0, 0, render.Width, render.Height); foreach (Node node in drinksMap.NeuralNet) { g.DrawString(node.DrinkID.ToString(), SystemFonts.MessageBoxFont, GetDrinkBrushById(node.DrinkID), (float)(node.X * drinksMap.DistanceBetweenNeurons * SCALE_FACTOR), (float)(node.Y * drinksMap.DistanceBetweenNeurons * SCALE_FACTOR)); } } return render; }
public void LoadNeuralNet(string filename) { NeuralNetReader reader = new NeuralNetReader(); drinksMap = reader.LoadNeuralNet(filename); }
public void LearnNeuralNet(int epochsCount, double initialLearningRate, float distanceBetweenNeurons, int neuralMapWidth, int neuralMapHeight, double minNeuronPotential, int maxNeuronRestTime) { NeuralNetTeacher learner = new NeuralNetTeacher(DrinksContainer.DrinksDictionary, epochsCount, initialLearningRate, distanceBetweenNeurons, neuralMapWidth, neuralMapHeight, DrinksContainer.FeaturesCount, minNeuronPotential, maxNeuronRestTime); drinksMap = learner.GetLearnedNeuralNet(); }