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)
- 0,651769
- 0,651604
- 0,651609
- 0,651679
- 0,651667
- 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;
}
}
}
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
Sie müssen genau erklären, was falsch ist. Welcher Teil deines Codes funktioniert nicht? –
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