Пример #1
0
        public static Network Load(string path, double learnRate)
        {
            if (File.Exists(path))
            {
                NetworkSaveModel model = JsonHelper.Deserialize <NetworkSaveModel>(path);
                Network          net   = new Network(model.Input, model.Hidden, model.Output, learnRate);

                int lastLayerNumber = model.Hidden.Length + 1; //output layer number - 1
                foreach (var weight in model.Weights)
                {
                    string[] parts = weight.Key.Split('_');
                    //1. in layer number
                    //2. in neuron number
                    //3. out neuron number
                    if (parts.Length != 3)
                    {
                        continue;
                    }

                    int[] numeric = new int[parts.Length];
                    for (int i = 0; i < parts.Length; i++)
                    {
                        numeric[i] = int.Parse(parts[i]);
                    }

                    if (numeric[0] == 0) //input layer neurons
                    {
                        net.inputLayer.Neurons[numeric[1]].OutBoundConnection(numeric[2]).weight = weight.Value;
                    }
                    else //layer connected to output
                    {
                        net.hiddenLayers[numeric[0] - 1].Neurons[numeric[1]].OutBoundConnection(numeric[2]).weight = weight.Value;
                    }
                }

                return(net);
            }
            return(null);
            //if (File.Exists(path))
            //{
            //    Network n = JsonHelper.Deserialize<Network>(path);
            //    return n;
            //}
            //return null;
        }
Пример #2
0
        public void Save(string path)
        {
            NetworkSaveModel save = new NetworkSaveModel();

            save.Input  = inputLayer.Size - 1;
            save.Output = outputLayer.Size;
            save.Hidden = new int[hiddenLayers.Length];
            for (int i = 0; i < hiddenLayers.Length; i++)
            {
                save.Hidden[i] = hiddenLayers[i].Size - 1;
            }

            List <Layer> layers = new List <Layer>();

            layers.Add(inputLayer);
            foreach (var hidden in hiddenLayers)
            {
                layers.Add(hidden);
            }
            layers.Add(outputLayer);

            save.Weights = new Dictionary <string, double>();

            for (int i = 0; i < layers.Count - 1; i++)
            {
                //LAYER_NEURON_LAYER_NEURON
                string key_template = "{0}_{1}_{2}";
                for (int j = 0; j < layers[i].Neurons.Length; j++)
                {
                    for (int k = 0; k < layers[i].Neurons[j].OutBoundSize; k++)
                    {
                        string key = string.Format(key_template, i, j, k);
                        save.Weights.Add(key, layers[i].Neurons[j].OutBoundConnection(k).weight);
                    }
                }
            }

            JsonHelper.Serialize(save, path);

            //JsonHelper.Serialize(this, path);
        }