2016-04-07 6 views
-5

Ich erstelle derzeit einen einfachen Einschicht-Perzeptron-Algorithmus. Es sollte eine TXT-Datei aufnehmen und der Algorithmus läuft darüber. Im Moment habe ich den Algorithmus und nur hart codierte Beispieldatenwerte zu testen, ob es funktioniert (was es tut), aber ich brauche es, um vorhandene Datenwerte aus einer Datei zu füttern. Ich habe versucht, es zum Laufen zu bringen, aber aufgrund meiner Unerfahrenheit im Codieren ist mir das nicht gelungen. Es wäre toll, wenn jemand mir helfen könnte, diesen Code mit externen Daten zu verarbeiten, da ich mir die Haare aus dem Leib gezogen habe. Die Daten sind wie folgt formatiert (natürlich ohne die Aufzählungszeichen).C# Perceptron-Algorithmus (Einlesen einer Datei)

  1. 0,651769
  2. 0,651604
  3. 0,651609
  4. 0,651679
  5. 0,651667
  6. 0,651699

Aktuelle Code:

using System; 
using System.IO; 
using System.Collections.Generic; 
namespace Network 
{ 
public class Network 

{ 
    static void Main() 
    { 
     // Load sample input patterns. 
     double[,] inputs = new double[,] { 

      {0.99, 0.99}, {0.99, 0.99}, {0.99, 0.99}, {0.99, 095}}; 

     // Load sample output patterns. 
     int[] outputs = new int[] {0, 1, 0, 0 }; 
     int patternCount = inputs.GetUpperBound(0) + 1; 

     // Randomise weights. 
     Random rdm = new Random(); 

     // Setting randomly generated weights between -0.5 and +0.5 
     double[] weights = {rdm.NextDouble()-0.5, rdm.NextDouble()-0.5, rdm.NextDouble()}; 

     // Set learning rate. 
     double learningRate = 1; 

     // Start iteration at 0 
     int iteration = 1; 
     double ErrorRate; 

     do 
     { 
      // Global error set to 0 
      ErrorRate = 0; 
      for (int j = 0; j < patternCount; j++) 
      { 
       // Calculate output. 
       int output = Output(weights, inputs[j, 0], inputs[j, 1]); 
       // Calculate error. 
       double localError = outputs[j] - output; 

       //if the localError is not equal to zero 
       if (localError != 0) 
       { 
        // Update weights. 
        for (int i = 0; i < 2; i++) 
        { 
         weights[i] += learningRate * localError * inputs[j, i]/2; 
        } 
       } 
       // Convert error to absolute value. 
       ErrorRate += (localError); 
      } 

      Console.WriteLine("Iteration {0}\tError {1}", iteration, ErrorRate); 
      iteration++; 

     // If the Error is equal to zero then calculate 
     } while (ErrorRate != 0); 

     // Convergence 
     Console.WriteLine(); 
     Console.WriteLine("[Input1] [Input2] [Output]"); 
     // Input1 values 
     for (double input1 = 0; input1 <= 1; input1 += 1) 
     { 
     // Input2 values 
      for (double input2 = 0; input2 <= 1; input2 += 1) 
      { 
       // Calculate output with the inputs and the randomly generated weights 
       int output = Output(weights, input1, input2); 
       Console.ForegroundColor = ConsoleColor.Cyan; 
       Console.WriteLine(" {0}   {1}  {2}", input1, input2, (output == 1) ? "1" : "0"); 
      } 
     } 
     Console.Read(); 
    } 

    private static int Output(double[] weights, double input1, double input2) 
    { 
     // Output = input1 * weight1 + input2 * weight2 + bias * weight3 
     double sum = input1 * weights[0] + input2 * weights[1] + 1 * weights[2]; 

     // If the first condition is true, then it becomes the result. If not, the second condition becomes the result 
     return (sum >= 0) ? 1 : 0; 
    } 
} 
} 
+3

Lesen Sie mehr über eine [MCVE] (http erstellen: // Stackoverflow. com/help/mcve) Beispiel. Im Grunde entfernen Sie "perceptron" und "algorithm" von Ihrer Frage und dem ganzen Code darum und fragen Sie, wie man "eine Textdatei einliest". Dann kann jemand es als Duplikat markieren und auf einige Antworten hinweisen. In welchem ​​Format befindet sich Ihre Textdatei? CSV? Eine Eingabe pro Zeile? Ich sehe keinen Code, wo Sie versucht haben, in einer Textdatei zu lesen. – Quantic

+1

Sie müssen genau erklären, was falsch ist. Welcher Teil deines Codes funktioniert nicht? –

+0

Ich brauche den folgenden Code, um in einer TXT-Datei (kein anderes Format) Zeile für Zeile von oben nach unten gelesen zu werden, mit denen ich Probleme hatte. Im Moment läuft der Algorithmus nur von fest codierten Datenwerten innerhalb eines Arrays mit einem Doppeltyp. double [,] Eingänge = new double [,] { {0,99, 0,99}, {0,99, 0,99}, {0,99, 0,99}, {0,99, 095}}; – Patrick

Antwort

-1

Wenn Sie nur eine Art und Weise wollen Zeilen aus einer Datei zu lesen, versuchen File.ReadAllLines (siehe MSDN link)

0

Sie sind auf der Suche nach

using System.Globalization; 
    using System.IO; 
    using System.Linq 

    ... 

    double[] data = File 
    .ReadLines(@"C:\MyFile.txt") //TODO: put actual file here 
    .Select(line => Double.Parse(line, CultureInfo.InvariantCulture)) 
    .ToArray(); 
Verwandte Themen