Esempio n. 1
0
        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();
 }