Laden...

Assoziativspeicher

Erstellt von Tomasbrk vor 3 Jahren Letzter Beitrag vor 3 Jahren 247 Views
T
Tomasbrk Themenstarter:in
1 Beiträge seit 2021
vor 3 Jahren
Assoziativspeicher

Hallo zusammen, ich habe eine Frage zu einem kleinen projekt aus der Ausbildung.
Inbesondere unter Punkt 5, weiß ich nicht wie ich Ausgabe bzw. Eingabe der Vektoren auf der Console ausgeben kann.
Kann hier jemand helfen?

Zum eigentlichen projekt (1-4) sind schon implementiert

  1. Neuron

Legen Sie als erstes eine Klasse „Neuron“ an. Das Neuron benötigt folgende Eigenschaften:

  1. int Index
  2. int NettoInput
  3. int Aktivierung
  4. int Ausgabe

Erstellen Sie einen Konstruktor, bei dem der Index als Parameter direkt übergeben und gesetzt wird.
Legen Sie folgende Methoden im Neuron an und erstellen Sie den zugehörigen Code in den Methoden:

  1. public void Aktivierungsfunktion():
    In dieser Methode soll aus dem NettoInput der Aktivierungswert des Neurons berechnet werden. Da die Aktivierungsfunktion bei Assoziativspeichern die Signum-Funktion ist, können Sie auf „Math.Sign“ zurückgreifen. Setzen Sie das Ergebnis in der Eigenschaft „Aktivierung“ des Neurons.

  2. public void Ausgabefunkton():
    In dieser Methode wird der Ausgabewert des Neurons berechnet. Da die Ausgabefunktion bei einem Assoziativspeicher die Identitätsfunktion ist, können Sie hier einfach den Ausgabewert gleich dem Aktivierungswert setzen.

  1. Gewichtsmatrix
    Erstellen Sie eine Klasse Gewichtsmatrix, die das Interface IGewichtsmatrix (using CKI.Interfaces) implementiert. Die Gewichtsmatrix muss folgende Eigenschaften haben:
  1. int Spalten
  2. int Zeilen

Legen Sie außerdem ein privates Feld „double[,] _matrix“ an. Darin wird die Gewichtsmatrix gespeichert. Auf dieses Feld wird von außen über den „Indexer“ der Gewichtsmatrix zugegriffen. Dieser wird beim implementieren des Interfaces automatisch angelegt.
Erweitern Sie den Indexer wie folgt:


public double this[int x, int y]
{
get
{
return _matrix[x,y];
}
set
{
_matrix[x, y] = value;
}
}

Legen Sie einen Konstruktor an, der die Anzahl der Zeilen und Spalten übergeben bekommt. Erzeugen Sie im Konstruktor das entsprechende _matrix-Objekt und initialisieren Sie es mit Nullen.

  1. TrainingsMuster
    Legen Sie eine Klasse „Trainingsmuster“ an, die das Interface „IBipolarTrainingsmuster“ implementiert und die folgenden Eigenschaften enthält:
  1. int[] Eingabevektor
  2. int[] Targetvektor
  1. AssoziativSpeicher
    Erstellen Sie eine Klasse AssoziativSpeicher. Legen Sie folgende Eigenschaften an:
  1. List<Neuron> EingabeNeuronen
  2. List<Neuron> AusgabeNeuronen
  3. IGewichtsmatrix Matrix (dazu wird ein using CKI.Interfaces benötigt)

Implementieren Sie die folgenden beiden Methoden:

  1. public void GeneriereMatrix(List<TIBipolarTrainingsMuster> trainingsMuster)
    Die Methode soll die Gewichtsmatrix berechnen, wie in der Vorlesung beschrieben.
    Gehen Sie wie folgt vor:

a. Prüfen Sie alle Trainingsmuster darauf, ob die Eingabevektor-Arrays alle die gleiche Länge haben (ebenso die Ausgabevektor-Arrays). Sollte das nicht der Fall sein, werfen Sie eine ArgumentException.

b. Erzeugen Sie die Listen der Eingabe- und Ausgabeneuronen und legen Sie entsprechend der Trainingsmuster Neuronen in den Listen an.

c. Erzeugen Sie für jedes Trainingsmuster eine Matrix. Dazu muss der jeweilige Eingabevektor mit dem zugehörigen Targetvektor multipliziert werden. Verwenden Sie dazu zwei ineinander geschachtelte for-Schleifen. Sammeln Sie die Teilmatrizen in einer Liste.

d. Erstellen Sie die _matrix des AssoziativSpeichers und addieren Sie alle berechneten Teilmatrizen. Dazu müssen Sie die Liste der Teilmatrizen mit einer foreach-Schleife durchlaufen und die einzelnen Komponenten aufaddieren (geschachtelte for-Schleifen über alle Zeilen und Spalten der Matrix).

  1. public List<int> BerechneAusgabe(int[] eingabeVektor, out string ausgabeVektor)
    Diese Methode soll die Ausgabe des Netzes berechnen. Gehen Sie wie folgt vor:

a. Setzen Sie den NettoInput der Eingabeneuronen anhand des Eingabevektors.

b. Führen Sie für die Eingabeneuronen die Aktivierungsfunktion und die Ausgabefunktion aus.

c. Setzen Sie den NettoInput aller Ausgabeneuronen auf Null.

d. Addieren Sie die Ausgabewerte aller Eingabeneuronen multipliziert mit dem zugehörigen Gewicht aus der Gewichtsmatrix auf den NettoInput der Ausgabeneuronen.
(Verwenden Sie hier zwei ineinander geschachtelte for-Schleifen, um später auch Vektoren unterschiedlicher Länge verarbeiten zu können.

e. Führen Sie für alle Ausgabeneuronen die Aktivierungsfunktion und die Ausgabefunktion durch.

f. Fügen Sie die Ausgabewerte der Ausgabeneuronen in eine Liste ein, um diese zurückzugeben.

g. Wandeln Sie den Ausgabevektor (die Liste) in einen String um, um diesen als Out-Parameter zurückzugeben (in der Form: [ 1, -1, 1]). Setzen Sie den Out-Parameter „ausgabeVektor“ und geben Sie dann die Liste zurück.

  1. Konsole
    Erzeugen Sie im Konsolenprojekt drei Trainingsmuster und fügen Sie in diese in eine Liste ein.
    Verwenden Sie folgende Muster:
    Input 1: [+1, +1, +1] Output 1:[+1, +1, +1, -1] Input 2: [+1, -1, +1] Output 1:[ -1, -1, +1, +1] Input 3: [+1, +1, -1] Output 1:[ -1, +1, +1, +1]

**Erzeugen Sie eine Instanz Ihres Assoziativspeichers.
Generieren Sie die Matrix mit der entsprechenden Methode berechnen Sie dann für jeden Eingabevektor der Trainingsmuster den zugehörigen Ausgabevektor.

Geben Sie auf der Konsole jeweils hintereinander den Eingabevektor und den Targetvektor des Trainingsmusters sowie den tatsächlich berechneten Ausgabevektor des Netzes aus.**

16.835 Beiträge seit 2008
vor 3 Jahren

Was ist Deine Frage? Das Forum ist kein Quellcode-Generator für Hausaufgaben.

Hinweis von MrSparkle vor 3 Jahren

...vor allem nicht im Code-Review-Forum, daher verschoben