09.10.2013 Aufrufe

Neuronale Netze Aufgaben 2 - KIT

Neuronale Netze Aufgaben 2 - KIT

Neuronale Netze Aufgaben 2 - KIT

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!