/// <summary> /// Generate the RSOM network. /// </summary> /// /// <returns>The neural network.</returns> public IMLMethod Generate() { var pnn = new BasicPNN(_kernel, _outmodel, _inputNeurons, _outputNeurons); return(pnn); }
public void TestPersistSerial() { BasicPNN network = create(); SerializeObject.Save(SERIAL_FILENAME.ToString(), network); BasicPNN network2 = (BasicPNN)SerializeObject.Load(SERIAL_FILENAME.ToString()); XOR.VerifyXOR(network2, 0.001); }
public void TestPersistEG() { BasicPNN network = create(); EncogDirectoryPersistence.SaveObject((EG_FILENAME), network); BasicPNN network2 = (BasicPNN)EncogDirectoryPersistence.LoadObject((EG_FILENAME)); XOR.VerifyXOR(network2, 0.001); }
/// <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; }
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); }
/// <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> /// 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); }