2016-08-21 5 views
11

मैं पूरे दस्तावेज के माध्यम से चला गया और आरबीएफ नेटवर्क को सेट करने का तरीका नहीं मिला। मुझे ConsoleExmpales/उदाहरण/रेडियल में कुछ आरबीएफ उदाहरण मिला, लेकिन ऐसा लगता है कि यह अब काम नहीं करता है, क्योंकि एनकॉग में कुछ विधियों को बदल दिया गया है।एनकॉग सी # आरबीएफ नेटवर्क, कैसे शुरू करें?

अब तक मैं इस पर अटक कर रहा हूँ:

public static double[][] XORInput = { 
     new[] {0.0, 0.0}, 
     new[] {1.0, 0.0}, 
     new[] {0.0, 1.0}, 
     new[] {1.0, 1.0} 
    }; 

    public static double[][] XORIdeal = { 
     new[] {0.0}, 
     new[] {1.0}, 
     new[] {1.0}, 
     new[] {0.0} 
    }; 

     int dimension = 8; 
     int numNeuronsPerDimension = 64; 
     double volumeNeuronWidth = 2.0/numNeuronsPerDimension; 
     bool includeEdgeRBFs = true; 

     RBFNetwork n = new RBFNetwork(dimension, numNeuronsPerDimension, 1, RBFEnum.Gaussian); 
     n.SetRBFCentersAndWidthsEqualSpacing(0, 1, RBFEnum.Gaussian, volumeNeuronWidth, includeEdgeRBFs); 
     //n.RandomizeRBFCentersAndWidths(0, 1, RBFEnum.Gaussian); 

     INeuralDataSet trainingSet = new BasicNeuralDataSet(XORInput, XORIdeal); 
     SVDTraining train = new SVDTraining(n, trainingSet); 

     int epoch = 1; 
     do 
     { 
      train.Iteration(); 
      Console.WriteLine("Epoch #" + epoch + " Error:" + train.Error); 
      epoch++; 
     } while ((epoch < 1) && (train.Error > 0.001)); 

जब मैं इस चलाने के लिए, मैं त्रुटि मिलती है "RBF न्यूरॉन्स की कुल संख्या 'आयाम' की शक्ति के लिए कुछ पूर्णांक होना चाहिए।" पर सेटबीबीएफसीएन्टर्स एंडविड्थ्स एक्वाल स्पेसिंग पर। यह काम करता है अगर मैं इस विधि को के लिए बदलता हूं RandomizeRBFCentersAndWidthsट्रेन.इटरेशन() तक पहुंच गया है, जहां मुझे "इंडेक्स की सीमाओं के बाहर था" मिलता है।

मैं समझता हूं कि आरबीएफ नेटवर्क कैसे काम करता है, लेकिन मैं SetRBFCentersAndWidthsEqualSpacing विधि में सभी मानकों से उलझन में हूं, क्या कोई इसे और विस्तार से समझा सकता है?

उत्तर

2

बहुत अच्छा सवाल है।

  1. SetRBFCentersAndWidthsEqualSpacingand here अपेक्षाकृत प्रशिक्षण तंत्रिका नेटवर्क की नई विधि है और जेफ हीटन इसे लागू करने का फैसला किया।
  2. ऐसा लगता है कि Java version और C# version के बीच 230-240 और आईएमएचओ बग जावा संस्करण में बैठता है।

    using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Text; 
    using System.Threading.Tasks; 
    using Encog.MathUtil.RBF; 
    using Encog.Neural.Data.Basic; 
    using Encog.Neural.NeuralData; 
    using Encog.Neural.Rbf.Training; 
    using Encog.Neural.RBF; 
    
    namespace TestRBF 
    { 
        class Program 
        { 
         public static double[][] XORInput = { 
         new[] {0.0, 0.0}, 
         new[] {1.0, 0.0}, 
         new[] {0.0, 1.0}, 
         new[] {1.0, 1.0} 
        }; 
    
         public static double[][] XORIdeal = { 
         new[] {0.0}, 
         new[] {1.0}, 
         new[] {1.0}, 
         new[] {0.0} 
        }; 
    
         static void Main(string[] args) 
         { 
          int dimension = 2; // XORInput provides two-dimensional inputs. Not 8. 
          /* 
          If XORInput is 8 dimensional it should be like this: 
    
          public static double[][] XORInput = { 
          new[] {0.0, 0.0,0.0, 0.0,0.0, 0.0,0.0, 0.0}, 
          . 
          . 
          .*/ 
          int numNeuronsPerDimension = 4; // could be also 16, 64, 256. I suppose it should accept 8, 32 but it needs additional investigation 
          double volumeNeuronWidth = 2.0/numNeuronsPerDimension; 
          bool includeEdgeRBFs = true; 
    
          RBFNetwork n = new RBFNetwork(dimension, numNeuronsPerDimension, 1, RBFEnum.Gaussian); 
          n.SetRBFCentersAndWidthsEqualSpacing(0, 1, RBFEnum.Gaussian, volumeNeuronWidth, includeEdgeRBFs); 
          //n.RandomizeRBFCentersAndWidths(0, 1, RBFEnum.Gaussian); 
    
          INeuralDataSet trainingSet = new BasicNeuralDataSet(XORInput, XORIdeal); 
          SVDTraining train = new SVDTraining(n, trainingSet); 
    
          int epoch = 1; 
          do 
          { 
           train.Iteration(); 
           Console.WriteLine("Epoch #" + epoch + " Error:" + train.Error); 
           epoch++; 
          } while ((epoch < 1) && (train.Error > 0.001)); 
    
         } 
        } 
    } 
    
+1

मैं अपने आयाम बदलने के लिए भूल गया, 2 सही है:

  • मैं इसे अतिरिक्त टिप्पणी के साथ व्यावहारिक होने के लिए उसके लिए आपको अपने कोड को संशोधित किया गया है। NumNeuronsPerDimension को इंगित करने के लिए धन्यवाद, अब यह काम करता है! मैंने 8, 32 की कोशिश की है और यह काम नहीं करता है, इसलिए केवल 16, 64, 256. – EdWood

  • +1

    आयाम की डब्लूआरटी शक्ति आरबीएफ केंद्रों की आवश्यकता है और बराबर चौड़ाई दूरी एल्गोरिदम –

    +0

    मुझे लगता है कि लाइन 232 पर .NET संस्करण में एक बग है: var अपेक्षितसाइडलाइट = (int) Math.Pow (कुल NumHiddenNeurons, 1.0d/आयाम); डबल सीएमपी = Math.Pow (कुल NumHiddenNeurons, 1.0d/आयाम); अगर (अपेक्षितसाइडलाइट! = सीएमपी) ये दो चर बराबर नहीं हो सकते हैं, क्योंकि "(int)" संख्या को राउंड करता है। यह संयोग है कि यह एक्सओआर उदाहरण के लिए काम करता है, अलग-अलग आयामों के साथ 1 9 यह काम नहीं करेगा। – EdWood

    संबंधित मुद्दे