Inheritance: AbstractPNN, IMLRegression
        public void TestClassifyPNN()
        {
            PNNOutputMode mode = PNNOutputMode.Classification;
            BasicPNN network = new BasicPNN(PNNKernelType.Gaussian, mode, 2, 2);

            IMLDataSet trainingData = new BasicMLDataSet(XOR.XORInput, XOR.XORIdeal);

            TrainBasicPNN train = new TrainBasicPNN(network, trainingData);
            train.Iteration();

            XOR.VerifyXOR(network, 0.01);
        }
        public BasicPNN create()
        {
            PNNOutputMode mode = PNNOutputMode.Regression;

            BasicPNN network = new BasicPNN(PNNKernelType.Gaussian, mode, 2, 1);

            BasicMLDataSet trainingSet = new BasicMLDataSet(XOR.XORInput,
                    XOR.XORIdeal);

            TrainBasicPNN train = new TrainBasicPNN(network, trainingSet);
            train.Iteration();
            XOR.VerifyXOR(network, 0.001);
            return network;
        }
Exemple #3
0
 /// <summary>
 /// Generate the RSOM network.
 /// </summary>
 ///
 /// <returns>The neural network.</returns>
 public IMLMethod Generate()
 {
     var pnn = new BasicPNN(_kernel, _outmodel,
                            _inputNeurons, _outputNeurons);
     return pnn;
 }
        /// <summary>
        /// Create a PNN network.
        /// </summary>
        ///
        /// <param name="architecture">THe architecture string to use.</param>
        /// <param name="input">The input count.</param>
        /// <param name="output">The output count.</param>
        /// <returns>The RBF network.</returns>
        public IMLMethod Create(String architecture, int input,
                               int output)
        {
            IList<String> layers = ArchitectureParse.ParseLayers(architecture);
            if (layers.Count != MaxLayers)
            {
                throw new EncogError(
                    "PNN Networks must have exactly three elements, "
                    + "separated by ->.");
            }

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

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

            PNNKernelType kernel;
            PNNOutputMode outmodel;

            if (pnnLayer.Name.Equals("c", StringComparison.InvariantCultureIgnoreCase))
            {
                outmodel = PNNOutputMode.Classification;
            }
            else if (pnnLayer.Name.Equals("r", StringComparison.InvariantCultureIgnoreCase))
            {
                outmodel = PNNOutputMode.Regression;
            }
            else if (pnnLayer.Name.Equals("u", StringComparison.InvariantCultureIgnoreCase))
            {
                outmodel = PNNOutputMode.Unsupervised;
            }
            else
            {
                throw new NeuralNetworkError("Unknown model: " + pnnLayer.Name);
            }

            var holder = new ParamsHolder(pnnLayer.Params);

            String kernelStr = holder.GetString("KERNEL", false, "gaussian");

            if (kernelStr.Equals("gaussian", StringComparison.InvariantCultureIgnoreCase))
            {
                kernel = PNNKernelType.Gaussian;
            }
            else if (kernelStr.Equals("reciprocal", StringComparison.InvariantCultureIgnoreCase))
            {
                kernel = PNNKernelType.Reciprocal;
            }
            else
            {
                throw new NeuralNetworkError("Unknown kernel: " + kernelStr);
            }

            var result = new BasicPNN(kernel, outmodel, inputCount,
                                      outputCount);

            return result;
        }
        /// <summary>
        /// Train a BasicPNN.
        /// </summary>
        ///
        /// <param name="network">The network to train.</param>
        /// <param name="training">The training data.</param>
        public TrainBasicPNN(BasicPNN network, IMLDataSet training)
            : base(TrainingImplementationType.OnePass)
        {
            _network = network;
            _training = training;

            _maxError = DefaultMaxError;
            _minImprovement = DefaultMinImprovement;
            _sigmaLow = DefaultSigmaLow;
            _sigmaHigh = DefaultSigmaHigh;
            _numSigmas = DefaultNumSigmas;
            _samplesLoaded = false;
        }
        /// <summary>
        /// Read an object.
        /// </summary>
        public Object Read(Stream mask0)
        {
            var ins0 = new EncogReadHelper(mask0);
            EncogFileSection section;
            var samples = new BasicMLDataSet();
            IDictionary<String, String> networkParams = null;
            PNNKernelType kernel = default(PNNKernelType) /* was: null */;
            PNNOutputMode outmodel = default(PNNOutputMode) /* was: null */;
            int inputCount = 0;
            int outputCount = 0;
            double error = 0;
            double[] sigma = null;

            while ((section = ins0.ReadNextSection()) != null)
            {
                if (section.SectionName.Equals("PNN")
                    && section.SubSectionName.Equals("PARAMS"))
                {
                    networkParams = section.ParseParams();
                }
                if (section.SectionName.Equals("PNN")
                    && section.SubSectionName.Equals("NETWORK"))
                {
                    IDictionary<String, String> paras = section.ParseParams();
                    inputCount = EncogFileSection.ParseInt(paras,
                                                           PersistConst.InputCount);
                    outputCount = EncogFileSection.ParseInt(paras,
                                                            PersistConst.OutputCount);
                    kernel = StringToKernel(paras[PersistConst.Kernel]);
                    outmodel = StringToOutputMode(paras[PropertyOutputMode]);
                    error = EncogFileSection
                        .ParseDouble(paras, PersistConst.Error);
                    sigma = section.ParseDoubleArray(paras, PersistConst.Sigma);
                }
                if (section.SectionName.Equals("PNN")
                    && section.SubSectionName.Equals("SAMPLES"))
                {
                    foreach (String line  in  section.Lines)
                    {
                        IList<String> cols = EncogFileSection
                            .SplitColumns(line);
                        int index = 0;
                        var inputData = new BasicMLData(inputCount);
                        for (int i = 0; i < inputCount; i++)
                        {
                            inputData[i] =
                                CSVFormat.EgFormat.Parse(cols[index++]);
                        }
                        var idealData = new BasicMLData(inputCount);

                        idealData[0] = CSVFormat.EgFormat.Parse(cols[index++]);

                        IMLDataPair pair = new BasicMLDataPair(inputData,
                                                              idealData);
                        samples.Add(pair);
                    }
                }
            }

            var result = new BasicPNN(kernel, outmodel, inputCount,
                                      outputCount);
            if (networkParams != null)
            {
                EngineArray.PutAll(networkParams, result.Properties);
            }
            result.Samples = samples;
            result.Error = error;
            if (sigma != null)
            {
                EngineArray.ArrayCopy(sigma, result.Sigma);
            }

            return result;
        }
Exemple #7
0
 public object Read(Stream mask0)
 {
     EncogFileSection section;
     double num3;
     double[] numArray;
     IDictionary<string, string> dictionary2;
     int num4;
     int num5;
     int num6;
     BasicPNN cpnn;
     EncogReadHelper helper = new EncogReadHelper(mask0);
     BasicMLDataSet set = new BasicMLDataSet();
     IDictionary<string, string> source = null;
     PNNKernelType gaussian = PNNKernelType.Gaussian;
     PNNOutputMode unsupervised = PNNOutputMode.Unsupervised;
     int inputCount = 0;
     int outputCount = 0;
     goto Label_042A;
     Label_000C:
     cpnn.Error = num3;
     while (numArray != null)
     {
         EngineArray.ArrayCopy(numArray, cpnn.Sigma);
         return cpnn;
     }
     if ((((uint) num3) - ((uint) outputCount)) <= uint.MaxValue)
     {
         if ((((uint) num5) - ((uint) outputCount)) >= 0)
         {
             return cpnn;
         }
         if ((((uint) inputCount) - ((uint) inputCount)) >= 0)
         {
             goto Label_0319;
         }
         if (((uint) num4) >= 0)
         {
             goto Label_02F1;
         }
         goto Label_02BB;
     }
     goto Label_00D8;
     Label_0075:
     while (source != null)
     {
         EngineArray.PutAll<string, string>(source, cpnn.Properties);
         if ((((uint) outputCount) + ((uint) num3)) >= 0)
         {
             break;
         }
     }
     cpnn.Samples = set;
     goto Label_00A5;
     Label_0082:
     if ((section = helper.ReadNextSection()) != null)
     {
         if (section.SectionName.Equals("PNN") && (((((uint) num4) & 0) != 0) || section.SubSectionName.Equals("PARAMS")))
         {
             source = section.ParseParams();
         }
         if (section.SectionName.Equals("PNN") && section.SubSectionName.Equals("NETWORK"))
         {
             dictionary2 = section.ParseParams();
             if ((((uint) outputCount) + ((uint) num6)) <= uint.MaxValue)
             {
                 inputCount = EncogFileSection.ParseInt(dictionary2, "inputCount");
                 outputCount = EncogFileSection.ParseInt(dictionary2, "outputCount");
             }
             gaussian = StringToKernel(dictionary2["kernel"]);
             if (0 != 0)
             {
                 return cpnn;
             }
             unsupervised = StringToOutputMode(dictionary2["outputMode"]);
             goto Label_0319;
         }
         goto Label_02BB;
     }
     cpnn = new BasicPNN(gaussian, unsupervised, inputCount, outputCount);
     if (4 != 0)
     {
         goto Label_0075;
     }
     Label_00A5:
     if ((((uint) outputCount) | 15) != 0)
     {
         goto Label_000C;
     }
     goto Label_0082;
     Label_00D8:
     if (0 != 0)
     {
         goto Label_042A;
     }
     if ((((uint) num3) | 1) != 0)
     {
         goto Label_0082;
     }
     goto Label_000C;
     Label_02BB:
     if (section.SectionName.Equals("PNN"))
     {
         if (((uint) inputCount) > uint.MaxValue)
         {
             goto Label_0075;
         }
         if (section.SubSectionName.Equals("SAMPLES"))
         {
             using (IEnumerator<string> enumerator = section.Lines.GetEnumerator())
             {
                 string str;
                 IList<string> list;
                 IMLData data;
                 IMLData data2;
                 IMLDataPair pair;
                 goto Label_0193;
             Label_0174:
                 set.Add(pair);
                 if ((((uint) num4) & 0) != 0)
                 {
                     goto Label_0206;
                 }
             Label_0193:
                 if (enumerator.MoveNext())
                 {
                     goto Label_0255;
                 }
                 goto Label_0082;
             Label_01A1:
                 data2[num6] = CSVFormat.EgFormat.Parse(list[num4++]);
                 num6++;
             Label_01C8:
                 if (num6 < outputCount)
                 {
                     goto Label_01A1;
                 }
                 pair = new BasicMLDataPair(data, data2);
                 if (((uint) num3) >= 0)
                 {
                     goto Label_0174;
                 }
                 goto Label_0082;
             Label_01ED:
                 if (((uint) num5) > uint.MaxValue)
                 {
                     goto Label_0238;
                 }
                 num6 = 0;
                 goto Label_01C8;
             Label_0206:
                 num5 = 0;
                 while (num5 < inputCount)
                 {
                     data[num5] = CSVFormat.EgFormat.Parse(list[num4++]);
                     num5++;
                 }
             Label_0238:
                 data2 = new BasicMLData(inputCount);
                 goto Label_01ED;
             Label_0245:
                 num4 = 0;
                 data = new BasicMLData(inputCount);
                 goto Label_0206;
             Label_0255:
                 str = enumerator.Current;
                 list = EncogFileSection.SplitColumns(str);
                 if ((((uint) num6) + ((uint) num4)) <= uint.MaxValue)
                 {
                     goto Label_0245;
                 }
                 goto Label_0082;
             }
             if ((((uint) inputCount) + ((uint) num5)) <= uint.MaxValue)
             {
                 if ((((uint) outputCount) + ((uint) num6)) <= uint.MaxValue)
                 {
                     goto Label_033B;
                 }
                 goto Label_0319;
             }
             goto Label_02F1;
         }
     }
     goto Label_0082;
     Label_02F1:
     numArray = EncogFileSection.ParseDoubleArray(dictionary2, "sigma");
     goto Label_02BB;
     Label_0319:
     num3 = EncogFileSection.ParseDouble(dictionary2, "error");
     if ((((uint) inputCount) & 0) == 0)
     {
         goto Label_02F1;
     }
     Label_033B:
     if ((((uint) inputCount) & 0) == 0)
     {
         goto Label_00D8;
     }
     return cpnn;
     Label_042A:
     num3 = 0.0;
     numArray = null;
     if ((((uint) num4) - ((uint) num6)) < 0)
     {
         goto Label_0075;
     }
     goto Label_0082;
 }