NN Loop Feedforward versetzt?

 

Hallo,

Da ich trotz debugger und Prints nicht ganz weiter komme fehlt mir für heute jegliche Auswegsmöglichkeit...

Das Netzsieht folgendermaßen aus: 11 Inputs (Layer 0), 6Hidden Neuonen (Layer 1), 6Hidden Neuonen (Layer 2),9Hidden Neuonen (Layer 3), 3Output Neuonen (Layer 4).


Hier der ProblemOutput: wobei das problem in folgendem kurszausschnitt liegt:

// Das kann so nicht richtig sein :/

2019.06.25 00:46:19.270 2017.01.01 00:00:00    Weight[0][2][2](1.5) x NET[0][2](3407730.0) = 5111595.0
2019.06.25 00:46:19.270 2017.01.01 00:00:00    Weight[1][2][2](1.5) x NET[1][2](15675558.0) = 23513337.0
2019.06.25 00:46:19.270 2017.01.01 00:00:00    Weight[2][2][2](1.5) x NET[2][2](72414262.5) = 108621393.75
2019.06.25 00:46:19.270 2017.01.01 00:00:00    Weight[3][2][2](1.5) x NET[3][2](340773.0) = 511159.5
2019.06.25 00:46:19.270 2017.01.01 00:00:00    Weight[4][2][2](1.5) x NET[4][2](340773.0) = 511159.5
2019.06.25 00:46:19.270 2017.01.01 00:00:00    Weight[5][2][2](1.5) x NET[5][2](340773.0) = 511159.5
2019.06.25 00:46:19.270 2017.01.01 00:00:00    Weight[6][2][2](1.5) x NET[6][2](0.0) = 0.0
2019.06.25 00:46:19.270 2017.01.01 00:00:00    Weight[7][2][2](1.5) x NET[7][2](0.0) = 0.0
2019.06.25 00:46:19.270 2017.01.01 00:00:00    Weight[8][2][2](1.5) x NET[8][2](0.0) = 0.0

für weight gilt [Sendeneuronen][Empfängerneuronen][Layer]

für NET gilt [Neuron][Layer] wobei L=0 die inputs X enthällt ( hier könnte der fehler liegen, jedoch habe ich den loop auch schon so probiert, ohne X als L =0 zu initialisieren (gab den Fehler, bei denen NET nicht weitergegeben wurde)


EDIT: LÖSUNG: Man kann innerhalb eines Loops (zumindest dem 3. loop) nicht einen Arrayeintrag ständig ändern (aufaddieren durch +=)

stattdessen ist es sinnvoll vor besagtem loop einen leeren double zu deklarieren (f_sum), auf diesen aufzuaddieren und diesen letztenendes in den Arrayeintrag zu initialisieren.

int f_sum = 0;
            for (int j = 0; j<ThisNeurons;j++) // für jedes Neuron im jetzigen Layer (NET[][0] ist gleich X[] (InputLayer)
                  {
                  f_sum+= Weights[j][i][l] * NET[j][l]; //Addiere Produkt aus Gewicht "ij" und zugehörigem Neuron ""j aus diesem Layer auf das Neuron "i" in nächstem Layer
                  }
            NET[i][l+1] = f_sum;      



PS: falls jemand weiß wie ich diesen Thread wenige Tage nach der erstellung als "solved" umbenennen kann, werde ich dies selbstverständlich tun.

 
Bayne:

Hallo,

Da ich trotz debugger und Prints nicht ganz weiter komme fehlt mir für heute jegliche Auswegsmöglichkeit...

Das Netzsieht folgendermaßen aus: 11 Inputs (Layer 0), 6Hidden Neuonen (Layer 1), 6Hidden Neuonen (Layer 2),9Hidden Neuonen (Layer 3), 3Output Neuonen (Layer 4).


Hier der ProblemOutput: wobei das problem in folgendem kurszausschnitt liegt:


für weight gilt [Sendeneuronen][Empfängerneuronen][Layer]

für NET gilt [Neuron][Layer] wobei L=0 die inputs X enthällt ( hier könnte der fehler liegen, jedoch habe ich den loop auch schon so probiert, ohne X als L =0 zu initialisieren (gab den Fehler, bei denen NET nicht weitergegeben wurde)


Hier der fertige gekürzte Code: (Output printet sich automatisch bei initialisierung)


PS: falls jemand weiß wie ich diesen Thread wenige Tage nach der erstellung als "solved" umbenennen kann, werde ich dies selbstverständlich tun.

Du. Rauchst nur die lösung posten, dann ist es automatisch klar

 
Bayne:

Hallo,

Da ich trotz debugger und Prints nicht ganz weiter komme fehlt mir für heute jegliche Auswegsmöglichkeit...

Das Netzsieht folgendermaßen aus: 11 Inputs (Layer 0), 6Hidden Neuonen (Layer 1), 6Hidden Neuonen (Layer 2),9Hidden Neuonen (Layer 3), 3Output Neuonen (Layer 4).


Hier der ProblemOutput: wobei das problem in folgendem kurszausschnitt liegt:


für weight gilt [Sendeneuronen][Empfängerneuronen][Layer]

für NET gilt [Neuron][Layer] wobei L=0 die inputs X enthällt ( hier könnte der fehler liegen, jedoch habe ich den loop auch schon so probiert, ohne X als L =0 zu initialisieren (gab den Fehler, bei denen NET nicht weitergegeben wurde)


Hier der fertige gekürzte Code: (Output printet sich automatisch bei initialisierung)


PS: falls jemand weiß wie ich diesen Thread wenige Tage nach der erstellung als "solved" umbenennen kann, werde ich dies selbstverständlich tun.


  1. Kannst Du mal Deinen Code besser Kommentieren zB. was ist X[], oder was ist welcher Schleife geschehen soll ...
  2. Das kann so nicht funktionieren:
    for(int l = 0; l<Layers+1;l++)
                {     
                int Neurons =0;
                if (l == Layers)   {Neurons = 1;} // es gilt immer l<Layer in der Schleife!!

So etwas zeigt aber eigentlich ein Debugger..

 
Carl Schreiber:


  1. Kannst Du mal Deinen Code besser Kommentieren zB. was ist X[], oder was ist welcher Schleife geschehen soll ...
  2. Das kann so nicht funktionieren:

So etwas zeigt aber eigentlich ein Debugger..

Layers ist ein input int (Layers = 4); wärend die ArraySize (nach meinem verständnis) einen Weight Layer mehr haben dürfte.daher ist auch auch eine +1 da ( ich weiß seltsamer syntax aber keine idee wie ich es sonst hätte lösen können):

for(int l = 0; l<Layers 


+1 ;l++)
            {     
            int Neurons =0;
            if (l == Layers)   {Neurons = 1;} // es gilt irgendwann l==Layer in der Schleife!!




Das Problem ist, dass die berechneten Neuronen nach dem letzten Loop ("j") verschwinden, wenn ich sie ausserhalb dessen aus NET[i][l+1] abrufe (ist mit pfeilen gekennzeichnet)

EDIT: LÖSUNG gefunden und oben geschrieben.


Thread kann geschlossen werden