Наследование: Encog.ML.BasicML, IMLError, IMLRegression, IContainsFlat
Пример #1
0
        /// <summary>
        /// Construct the training object.
        /// </summary>
        ///
        /// <param name="network_0">The network to train. Must have a single output neuron.</param>
        /// <param name="training">The training data to use. Must be indexable.</param>
        public SVDTraining(RBFNetwork network_0, IMLDataSet training) : base(TrainingImplementationType.OnePass)
        {
            if (network_0.OutputCount != 1)
            {
                throw new TrainingError(
                    "SVD requires an output layer with a single neuron.");
            }

            Training = training;
            network = network_0;
        }
Пример #2
0
        public void TestPersistEG()
        {
            IMLDataSet trainingSet = XOR.CreateXORDataSet();
            RBFNetwork network = new RBFNetwork(2, 4, 1, RBFEnum.Gaussian);

            SVDTraining training = new SVDTraining(network, trainingSet);
            training.Iteration();
            XOR.VerifyXOR(network, 0.1);

            EncogDirectoryPersistence.SaveObject(EG_FILENAME, network);
            RBFNetwork network2 = (RBFNetwork)EncogDirectoryPersistence.LoadObject(EG_FILENAME);

            XOR.VerifyXOR(network2, 0.1);
        }
Пример #3
0
 public SVDTraining(RBFNetwork network_0, IMLDataSet training)
     : base(TrainingImplementationType.OnePass)
 {
     while (-2147483648 != 0)
     {
         if (network_0.OutputCount != 1)
         {
             break;
         }
         this.Training = training;
         this.x87a7fc6a72741c2e = network_0;
         if (0 != 0)
         {
             break;
         }
         return;
     }
     throw new TrainingError("SVD requires an output layer with a single neuron.");
 }
Пример #4
0
        /// <summary>
        /// Create the SRN.
        /// </summary>
        ///
        /// <param name="architecture">The architecture string.</param>
        /// <param name="input">The input count.</param>
        /// <param name="output">The output count.</param>
        /// <returns>The newly created SRN.</returns>
        public IMLMethod Create(String architecture, int input,
                               int output)
        {
            IList<String> layers = ArchitectureParse.ParseLayers(architecture);
            if (layers.Count != MaxLayers)
            {
                throw new EncogError(
                    "SRN Networks must have exactly three elements, "
                    + "separated by ->.");
            }

            ArchitectureLayer inputLayer = ArchitectureParse.ParseLayer(
                layers[0], input);
            ArchitectureLayer rbfLayer = ArchitectureParse.ParseLayer(
                layers[1], -1);
            ArchitectureLayer outputLayer = ArchitectureParse.ParseLayer(
                layers[2], output);

            int inputCount = inputLayer.Count;
            int outputCount = outputLayer.Count;

            RBFEnum t;

            if (rbfLayer.Name.Equals("Gaussian", StringComparison.InvariantCultureIgnoreCase))
            {
                t = RBFEnum.Gaussian;
            }
            else if (rbfLayer.Name.Equals("Multiquadric", StringComparison.InvariantCultureIgnoreCase))
            {
                t = RBFEnum.Multiquadric;
            }
            else if (rbfLayer.Name.Equals("InverseMultiquadric", StringComparison.InvariantCultureIgnoreCase))
            {
                t = RBFEnum.InverseMultiquadric;
            }
            else if (rbfLayer.Name.Equals("MexicanHat", StringComparison.InvariantCultureIgnoreCase))
            {
                t = RBFEnum.MexicanHat;
            }
            else
            {
                t = RBFEnum.Gaussian;
            }

            var result = new RBFNetwork(inputCount,
                                        rbfLayer.Count, outputCount, t);

            return result;
        }
Пример #5
0
 /// <summary>
 /// Generate the RBF network.
 /// </summary>
 ///
 /// <returns>The neural network.</returns>
 public IMLMethod Generate()
 {
     var result = new RBFNetwork(_inputNeurons, _hiddenNeurons,
                                 _outputNeurons, _rbfType);
     return result;
 }
        /// <inheritdoc/>
        public Object Read(Stream mask0)
        {
            var result = new RBFNetwork();
            var flat = (FlatNetworkRBF) result.Flat;

            var ins0 = new EncogReadHelper(mask0);
            EncogFileSection section;

            while ((section = ins0.ReadNextSection()) != null)
            {
                if (section.SectionName.Equals("RBF-NETWORK")
                    && section.SubSectionName.Equals("PARAMS"))
                {
                    IDictionary<String, String> paras = section.ParseParams();
                    EngineArray.PutAll(paras, result.Properties);
                }
                if (section.SectionName.Equals("RBF-NETWORK")
                    && section.SubSectionName.Equals("NETWORK"))
                {
                    IDictionary<String, String> p = section.ParseParams();

                    flat.BeginTraining = EncogFileSection.ParseInt(p,
                                                                   BasicNetwork.TagBeginTraining);
                    flat.ConnectionLimit = EncogFileSection.ParseDouble(p,
                                                                        BasicNetwork.TagConnectionLimit);
                    flat.ContextTargetOffset = EncogFileSection.ParseIntArray(
                        p, BasicNetwork.TagContextTargetOffset);
                    flat.ContextTargetSize = EncogFileSection.ParseIntArray(
                        p, BasicNetwork.TagContextTargetSize);
                    flat.EndTraining = EncogFileSection.ParseInt(p,
                                                                 BasicNetwork.TagEndTraining);
                    flat.HasContext = EncogFileSection.ParseBoolean(p,
                                                                    BasicNetwork.TagHasContext);
                    flat.InputCount = EncogFileSection.ParseInt(p,
                                                                PersistConst.InputCount);
                    flat.LayerCounts = EncogFileSection.ParseIntArray(p,
                                                                      BasicNetwork.TagLayerCounts);
                    flat.LayerFeedCounts = EncogFileSection.ParseIntArray(p,
                                                                          BasicNetwork.TagLayerFeedCounts);
                    flat.LayerContextCount = EncogFileSection.ParseIntArray(p, BasicNetwork.TagLayerContextCount);
                    flat.LayerIndex = EncogFileSection.ParseIntArray(p,
                                                                     BasicNetwork.TagLayerIndex);
                    flat.LayerOutput = section.ParseDoubleArray(p,
                                                                         PersistConst.Output);
                    flat.LayerSums = new double[flat.LayerOutput.Length];
                    flat.OutputCount = EncogFileSection.ParseInt(p,PersistConst.OutputCount);
                    flat.WeightIndex = EncogFileSection.ParseIntArray(p,
                                                                      BasicNetwork.TagWeightIndex);
                    flat.Weights = section.ParseDoubleArray(p,
                                                                     PersistConst.Weights);
                    flat.BiasActivation = section.ParseDoubleArray(p, BasicNetwork.TagBiasActivation);
                }
                else if (section.SectionName.Equals("RBF-NETWORK")
                         && section.SubSectionName.Equals("ACTIVATION"))
                {
                    int index = 0;

                    flat.ActivationFunctions = new IActivationFunction[flat.LayerCounts.Length];

                    foreach (String line  in  section.Lines)
                    {
                        IActivationFunction af;
                        IList<String> cols = EncogFileSection
                            .SplitColumns(line);
                        String name = ReflectionUtil.AfPath
                                      + cols[0];
                        try
                        {
                            af = (IActivationFunction) ReflectionUtil.LoadObject(name);
                        }
                        catch (Exception e)
                        {
                            throw new PersistError(e);
                        }
                        for (int i = 0; i < af.ParamNames.Length; i++)
                        {
                            af.Params[i] = CSVFormat.EgFormat.Parse(cols[i + 1]);
                        }

                        flat.ActivationFunctions[index++] = af;
                    }
                }
                else if (section.SectionName.Equals("RBF-NETWORK")
                         && section.SubSectionName.Equals("RBF"))
                {
                    int index = 0;

                    int hiddenCount = flat.LayerCounts[1];
                    int inputCount = flat.LayerCounts[2];

                    flat.RBF = new IRadialBasisFunction[hiddenCount];

                    foreach (String line  in  section.Lines)
                    {
                        IRadialBasisFunction rbf;
                        IList<String> cols = EncogFileSection
                            .SplitColumns(line);
                        String name = ReflectionUtil.RBFPath + cols[0];
                        try
                        {
                            rbf = (IRadialBasisFunction) ReflectionUtil.LoadObject(name);
                        }
                        catch (TypeLoadException ex)
                        {
                            throw new PersistError(ex);
                        }
                        catch (TargetException ex)
                        {
                            throw new PersistError(ex);
                        }
                        catch (MemberAccessException ex)
                        {
                            throw new PersistError(ex);
                        }

                        rbf.Width = CSVFormat.EgFormat.Parse(cols[1]);
                        rbf.Peak = CSVFormat.EgFormat.Parse(cols[2]);
                        rbf.Centers = new double[inputCount];

                        for (int i = 0; i < inputCount; i++)
                        {
                            rbf.Centers[i] = CSVFormat.EgFormat.Parse(cols[i + 3]);
                        }

                        flat.RBF[index++] = rbf;
                    }
                }
            }

            return result;
        }
Пример #7
0
        public BasicNetwork CreateNetwork()
        {
            var network = new BasicNetwork();
            network.AddLayer(new BasicLayer(inputs));
            network.AddLayer(new BasicLayer(new ActivationLinear(), true, inputs/2 + 1));
            network.AddLayer(new BasicLayer(1));
            network.Structure.FinalizeStructure();
            network.Reset();

            /////////////////////////////////

            var rbfnetwork = new RBFNetwork(inputs, inputs/2 + 1, 1, RBFEnum.Gaussian);

            return network;
        }
Пример #8
0
 public object Read(Stream mask0)
 {
     EncogFileSection section;
     IDictionary<string, string> dictionary;
     IDictionary<string, string> dictionary2;
     int num;
     int num2;
     int num3;
     int num4;
     int num5;
     int num6;
     RBFNetwork network = new RBFNetwork();
     FlatNetworkRBF flat = (FlatNetworkRBF) network.Flat;
     EncogReadHelper helper = new EncogReadHelper(mask0);
     Label_003B:
     if ((section = helper.ReadNextSection()) != null)
     {
         if (!section.SectionName.Equals("RBF-NETWORK"))
         {
             goto Label_0473;
         }
         goto Label_069F;
     }
     if ((((uint) num5) & 0) == 0)
     {
         goto Label_0236;
     }
     goto Label_0070;
     Label_005E:
     if (!section.SectionName.Equals("RBF-NETWORK"))
     {
         goto Label_003B;
     }
     Label_0070:
     if (section.SubSectionName.Equals("RBF"))
     {
         num3 = 0;
         num4 = flat.LayerCounts[1];
         do
         {
             if (0 != 0)
             {
                 if ((((uint) num6) - ((uint) num2)) < 0)
                 {
                     goto Label_0473;
                 }
                 goto Label_0416;
             }
         }
         while ((((uint) num3) - ((uint) num3)) > uint.MaxValue);
         num5 = flat.LayerCounts[2];
         if ((((uint) num4) | 0xfffffffe) == 0)
         {
             goto Label_0473;
         }
         goto Label_0273;
     }
     if ((((uint) num) + ((uint) num)) > uint.MaxValue)
     {
         goto Label_02F4;
     }
     if ((((uint) num2) - ((uint) num5)) >= 0)
     {
         if (((((uint) num4) - ((uint) num3)) > uint.MaxValue) && ((((uint) num5) - ((uint) num5)) < 0))
         {
             goto Label_005E;
         }
         goto Label_003B;
     }
     Label_0236:
     if ((((uint) num3) + ((uint) num4)) >= 0)
     {
         return network;
     }
     if (4 != 0)
     {
         goto Label_02F4;
     }
     if ((((uint) num) + ((uint) num5)) >= 0)
     {
         goto Label_005E;
     }
     Label_0273:
     flat.RBF = new IRadialBasisFunction[num4];
     if (((uint) num2) >= 0)
     {
         if ((((uint) num5) | 0xfffffffe) == 0)
         {
             return network;
         }
         using (IEnumerator<string> enumerator2 = section.Lines.GetEnumerator())
         {
             string str3;
             IRadialBasisFunction function2;
             IList<string> list2;
             goto Label_00EC;
         Label_00D6:
             if (num6 < num5)
             {
                 goto Label_00FF;
             }
         Label_00DC:
             flat.RBF[num3++] = function2;
         Label_00EC:
             if (enumerator2.MoveNext())
             {
                 goto Label_01F2;
             }
             goto Label_003B;
         Label_00FA:
             num6 = 0;
             goto Label_00D6;
         Label_00FF:
             function2.Centers[num6] = CSVFormat.EgFormat.Parse(list2[num6 + 3]);
         Label_011E:
             num6++;
             if (0 == 0)
             {
                 goto Label_00D6;
             }
             goto Label_003B;
         Label_012C:
             function2.Centers = new double[num5];
             goto Label_00FA;
         Label_013F:
             if (0 != 0)
             {
                 goto Label_011E;
             }
             list2 = EncogFileSection.SplitColumns(str3);
             string name = "Encog.MathUtil.RBF." + list2[0];
             try
             {
                 function2 = (IRadialBasisFunction) ReflectionUtil.LoadObject(name);
             }
             catch (TypeLoadException exception2)
             {
                 throw new PersistError(exception2);
             }
             catch (TargetException exception3)
             {
                 throw new PersistError(exception3);
             }
             catch (MemberAccessException exception4)
             {
                 throw new PersistError(exception4);
             }
             function2.Width = CSVFormat.EgFormat.Parse(list2[1]);
             function2.Peak = CSVFormat.EgFormat.Parse(list2[2]);
             if ((((uint) num6) + ((uint) num)) >= 0)
             {
                 goto Label_0200;
             }
             if ((((uint) num4) - ((uint) num3)) < 0)
             {
                 goto Label_00DC;
             }
         Label_01F2:
             str3 = enumerator2.Current;
             goto Label_013F;
         Label_0200:
             if ((((uint) num4) | 3) != 0)
             {
                 goto Label_012C;
             }
             goto Label_00FA;
         }
     }
     Label_02F4:
     using (IEnumerator<string> enumerator = section.Lines.GetEnumerator())
     {
         string str;
         IActivationFunction function;
         IList<string> list;
         goto Label_0313;
     Label_0303:
         flat.ActivationFunctions[num++] = function;
     Label_0313:
         if (enumerator.MoveNext())
         {
             goto Label_03A2;
         }
         if (0xff != 0)
         {
             goto Label_003B;
         }
     Label_032B:
         if (num2 < function.ParamNames.Length)
         {
             goto Label_0376;
         }
         goto Label_03AD;
     Label_033A:
         list = EncogFileSection.SplitColumns(str);
         string str2 = "Encog.Engine.Network.Activation." + list[0];
         try
         {
             function = (IActivationFunction) ReflectionUtil.LoadObject(str2);
         }
         catch (Exception exception)
         {
             throw new PersistError(exception);
         }
         num2 = 0;
         goto Label_032B;
     Label_0376:
         function.Params[num2] = CSVFormat.EgFormat.Parse(list[num2 + 1]);
         num2++;
         goto Label_032B;
     Label_03A2:
         str = enumerator.Current;
         goto Label_033A;
     Label_03AD:
         if ((((uint) num2) | uint.MaxValue) != 0)
         {
             goto Label_0303;
         }
         goto Label_003B;
     }
     goto Label_005E;
     Label_0416:
     if (!section.SectionName.Equals("RBF-NETWORK") || !section.SubSectionName.Equals("ACTIVATION"))
     {
         goto Label_005E;
     }
     if ((((uint) num2) | 4) == 0)
     {
         goto Label_069F;
     }
     num = 0;
     Label_045E:
     flat.ActivationFunctions = new IActivationFunction[flat.LayerCounts.Length];
     goto Label_02F4;
     Label_0473:
     if (section.SectionName.Equals("RBF-NETWORK"))
     {
         goto Label_05FF;
     }
     goto Label_0416;
     Label_05EB:
     flat.InputCount = EncogFileSection.ParseInt(dictionary2, "inputCount");
     flat.LayerCounts = EncogFileSection.ParseIntArray(dictionary2, "layerCounts");
     if ((((uint) num) + ((uint) num3)) <= uint.MaxValue)
     {
         goto Label_06F4;
     }
     goto Label_06B4;
     Label_05FF:
     if (!section.SubSectionName.Equals("NETWORK"))
     {
         goto Label_0416;
     }
     dictionary2 = section.ParseParams();
     flat.BeginTraining = EncogFileSection.ParseInt(dictionary2, "beginTraining");
     flat.ConnectionLimit = EncogFileSection.ParseDouble(dictionary2, "connectionLimit");
     flat.ContextTargetOffset = EncogFileSection.ParseIntArray(dictionary2, "contextTargetOffset");
     flat.ContextTargetSize = EncogFileSection.ParseIntArray(dictionary2, "contextTargetSize");
     flat.EndTraining = EncogFileSection.ParseInt(dictionary2, "endTraining");
     flat.HasContext = EncogFileSection.ParseBoolean(dictionary2, "hasContext");
     goto Label_05EB;
     Label_069F:
     if (section.SubSectionName.Equals("PARAMS"))
     {
         dictionary = section.ParseParams();
     }
     else if (0 == 0)
     {
         goto Label_06D9;
     }
     Label_06B4:
     EngineArray.PutAll<string, string>(dictionary, network.Properties);
     if ((((uint) num5) - ((uint) num5)) >= 0)
     {
         goto Label_0473;
     }
     Label_06D9:
     if ((((uint) num) - ((uint) num3)) >= 0)
     {
         if (0 == 0)
         {
             goto Label_0473;
         }
         goto Label_05FF;
     }
     Label_06F4:
     if (-2147483648 != 0)
     {
         flat.LayerFeedCounts = EncogFileSection.ParseIntArray(dictionary2, "layerFeedCounts");
         if (((uint) num3) < 0)
         {
             goto Label_05EB;
         }
         flat.LayerContextCount = EncogFileSection.ParseIntArray(dictionary2, "layerContextCount");
         flat.LayerIndex = EncogFileSection.ParseIntArray(dictionary2, "layerIndex");
         if (0 == 0)
         {
             flat.LayerOutput = EncogFileSection.ParseDoubleArray(dictionary2, "output");
             flat.LayerSums = new double[flat.LayerOutput.Length];
             flat.OutputCount = EncogFileSection.ParseInt(dictionary2, "outputCount");
         }
         flat.WeightIndex = EncogFileSection.ParseIntArray(dictionary2, "weightIndex");
         if ((((uint) num3) > uint.MaxValue) || ((((uint) num2) - ((uint) num2)) < 0))
         {
             goto Label_045E;
         }
         flat.Weights = EncogFileSection.ParseDoubleArray(dictionary2, "weights");
         flat.BiasActivation = EncogFileSection.ParseDoubleArray(dictionary2, "biasActivation");
         goto Label_003B;
     }
     return network;
 }
Пример #9
0
        public BasicNetwork CreateNetwork()
        {
            var network = new BasicNetwork();
            network.AddLayer(new BasicLayer(WindowSize));
            network.AddLayer(new BasicLayer(new ActivationLinear(), true, WindowSize/2 + 1));
            network.AddLayer(new BasicLayer(1));
            network.Structure.FinalizeStructure();
            network.Reset();

            var rbfnetwork = new RBFNetwork(WindowSize, WindowSize/2 + 1, 1, RBFEnum.Gaussian);


            return network;
        }