Neuronale Netze Aufgaben 2 - KIT
Neuronale Netze Aufgaben 2 - KIT
Neuronale Netze Aufgaben 2 - KIT
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
<strong>Neuronale</strong> <strong>Netze</strong><br />
<strong>Aufgaben</strong> 2<br />
Dipl.-Inform. Martin Lösch<br />
martin.loesch@kit.edu<br />
(0721) – 608 45944
Aufgabe 3: Netz von Perzeptronen<br />
• Die Verknüpfung mehrerer Perzeptronen<br />
zu einem Netz erlaubt die Lösung auch<br />
komplexerer Probleme als nur die linear<br />
separierbaren.<br />
• Löse mit Hilfe eines <strong>Netze</strong>s von mehreren<br />
Perzeptronen das dargestellte Klassifikationsproblem<br />
(2 diskrete Eingänge, mögliche Werte: {0, 1, 2, 3}).<br />
• Aufbau der Lösung: 2 Eingaben, das<br />
eigentliche Netz von Perzeptronen,<br />
pro zu erkennender Klasse je ein<br />
x1 Ausgabe-Perzeptron.<br />
Dipl.-Inform. Martin Lösch<br />
Labor „Wissensbasierte Systeme“<br />
<strong>Neuronale</strong> <strong>Netze</strong> – <strong>Aufgaben</strong> 2<br />
x 2 Aufgabe<br />
2
Dipl.-Inform. Martin Lösch<br />
Labor „Wissensbasierte Systeme“<br />
Lösung Aufgabe 3 (1)<br />
namespace FL = Flood;<br />
FL::Perceptron ex3Horiz(2), ex3Diag(2), ex3BlackCross(2), ex3GreenCircle(2), ex3BlueSquare(2);<br />
void initExercise3Perceptrons()<br />
{<br />
ex3Horiz.set_activation_function(FL::Perceptron::Linear);<br />
[...]<br />
}<br />
ex3Horiz.set_bias(1.5);<br />
FL::Vector ex3hWeights(2); ex3hWeights[0] = 0.0; ex3hWeights[1] = -1.0;<br />
ex3Horiz.set_synaptic_weights(ex3hWeights);<br />
ex3Diag.set_bias(-2.25);<br />
FL::Vector ex3dWeights(2); ex3dWeights[0] = 0.5; ex3dWeights[1] = 0.5;<br />
ex3Diag.set_synaptic_weights(ex3dWeights);<br />
ex3BlackCross.set_bias(-0.5);<br />
FL::Vector ex3bcWeights(2); ex3bcWeights[0] = 1.0; ex3bcWeights[1] = 0.0;<br />
ex3BlackCross.set_synaptic_weights(ex3bcWeights);<br />
ex3GreenCircle.set_bias(0.25);<br />
FL::Vector ex3gcWeights(2); ex3gcWeights[0] = -0.5; ex3gcWeights[1] = -0.5;<br />
ex3GreenCircle.set_synaptic_weights(ex3gcWeights);<br />
ex3BlueSquare.set_bias(-0.5);<br />
FL::Vector ex3bsWeights(2); ex3bsWeights[0] = 0.0; ex3bsWeights[1] = 1.0;<br />
ex3BlueSquare.set_synaptic_weights(ex3bsWeights);<br />
<strong>Neuronale</strong> <strong>Netze</strong> – <strong>Aufgaben</strong> 2<br />
3
void calculateExercise3(double* signals)<br />
{<br />
FL::Vector inputSignals(2);<br />
}<br />
Dipl.-Inform. Martin Lösch<br />
Labor „Wissensbasierte Systeme“<br />
Lösung Aufgabe 3 (1)<br />
inputSignals[0] = signals[0]; inputSignals[1] = signals[1];<br />
double horizRes = ex3Horiz.calculate_output (inputSignals);<br />
inputSignals[0] = signals[0]; inputSignals[1] = signals[1];<br />
double diagRes = ex3Diag.calculate_output (inputSignals);<br />
inputSignals[0] = horizRes; inputSignals[1] = diagRes;<br />
double bcRes = ex3BlackCross.calculate_output (inputSignals);<br />
inputSignals[0] = horizRes; inputSignals[1] = diagRes;<br />
double gcRes = ex3GreenCircle.calculate_output (inputSignals);<br />
inputSignals[0] = horizRes; inputSignals[1] = diagRes;<br />
double bsRes = ex3BlueSquare.calculate_output (inputSignals);<br />
cout
Aufgabe 4: Lernen eines Perzeptrons<br />
• Die Einstellung der Gewichte eines Perzeptron per Hand ist<br />
aufwändig und fehlerträchtig. Der Perzeptron-Lernalgorithmus<br />
stellt daher eine sinnvolle Alternative dar.<br />
a) Implementieren Sie eine Funktion, die (gegeben eine<br />
Menge von Trainingsdaten) die Gewichte eines<br />
Perzeptrons einlernen kann.<br />
b) Verwenden Sie die neu implementierte Lernfunktion, um<br />
Gewichte einzulernen für Perzeptronen zur Realisierung<br />
einer<br />
(1) AND-Funktion<br />
(2) OR-Funktion<br />
Dipl.-Inform. Martin Lösch<br />
Labor „Wissensbasierte Systeme“<br />
<strong>Neuronale</strong> <strong>Netze</strong> – <strong>Aufgaben</strong> 2<br />
5
FRAMEWORK FÜR<br />
PERZEPTRON-LERNEN<br />
Dipl.-Inform. Martin Lösch<br />
Labor „Wissensbasierte Systeme“<br />
<strong>Neuronale</strong> <strong>Netze</strong> – <strong>Aufgaben</strong> 2<br />
6
€<br />
Hilfsmenge<br />
Dipl.-Inform. Martin Lösch<br />
Labor „Wissensbasierte Systeme“<br />
Lernen - Geometrische<br />
Interpretation<br />
{ }<br />
N ′ = x ′ | x ′ = −x,∀x ∈ N<br />
Neues Lernproblem<br />
xw > 0 , ∀x ∈ ′<br />
N ∪ P<br />
Im Beispiel: alle x i aus P<br />
<strong>Neuronale</strong> <strong>Netze</strong> – <strong>Aufgaben</strong> 2
Dipl.-Inform. Martin Lösch<br />
Labor „Wissensbasierte Systeme“<br />
Perzeptron – Lernalgorithmus<br />
Start: Gegeben Lerndatenmenge P ∪ N<br />
Der Gewichtsvektor w(0) wird zufällig generiert.<br />
Setze t:=0.<br />
Testen: Ein Punkt x in P ∪ N wird zufällig gewählt.<br />
Falls x ∈ P und w(t)⋅x > 0 gehe zu Testen<br />
Falls x ∈ P und w(t)⋅x ≤ 0 gehe zu Addieren<br />
Falls x ∈ N und w(t)⋅x < 0 gehe zu Testen<br />
Falls x ∈ N und w(t)⋅x ≥ 0 gehe zu Subtrahieren<br />
Addieren: Setze w(t+1) = w(t)+x.<br />
Setze t:= t+1. Gehe zu Testen.<br />
Subtrahieren: Setze w(t+1) = w(t)-x.<br />
Setze t:=t+1. Gehe zu Testen.<br />
<strong>Neuronale</strong> <strong>Netze</strong> – <strong>Aufgaben</strong> 2
• Vorgegebener Ablauf:<br />
Daten<br />
laden<br />
Dipl.-Inform. Martin Lösch<br />
Labor „Wissensbasierte Systeme“<br />
Framework-Quelldatei<br />
Perzeptron<br />
trainieren<br />
• Trainingsdaten werden aus Datei geladen:<br />
TrainingData* loadDataFromFile(filename)<br />
• Perzeptron wird trainiert:<br />
Perzeptron* trainNewPerceptron(traindata)<br />
• Perzeptron wird verwendet/getestet:<br />
void runPerceptron(Perceptron* neuron)<br />
<strong>Neuronale</strong> <strong>Netze</strong> – <strong>Aufgaben</strong> 2<br />
Perzeptron<br />
verwenden<br />
MUSS IMPLEMENTIERT WERDEN!<br />
9
• Anzahl der Eingänge<br />
• Eine Instanz pro Zeile<br />
• Komma-separierte Werte<br />
Dipl.-Inform. Martin Lösch<br />
Labor „Wissensbasierte Systeme“<br />
Daten-Dateiformat<br />
• Letzer Wert: Klasse der Instanz<br />
• Beispiele:<br />
andData.txt<br />
2<br />
0,0,-<br />
0,1,-<br />
1,0,-<br />
1,1,+<br />
orData.txt<br />
2<br />
0,0,-<br />
0,1,+<br />
1,0,+<br />
1,1,+<br />
<strong>Neuronale</strong> <strong>Netze</strong> – <strong>Aufgaben</strong> 2<br />
xorData.txt<br />
2<br />
0,0,-<br />
0,1,+<br />
1,0,+<br />
1,1,-<br />
10