Neuronale Netze Aufgaben 2 Dipl.-Inform. Martin Lösch
[email protected] (0721) – 608 45944
Aufgabe 3: Netz von Perzeptronen • Die Verknüpfung mehrerer Perzeptronen zu einem Netz erlaubt die Lösung auch komplexerer Probleme als nur die linear separierbaren. • Löse mit Hilfe eines Netzes von mehreren Perzeptronen das dargestellte Klassifikationsproblem (2 diskrete Eingänge, mögliche Werte: {0, 1, 2, 3}). • Aufbau der Lösung: 2 Eingaben, das eigentliche Netz von Perzeptronen, pro zu erkennender Klasse je ein x 1 Ausgabe-Perzeptron. be
x2 Dipl.-Inform. Martin Lösch Labor „Wissensbasierte Systeme“
Neuronale Netze – Aufgaben 2
a g f
Au
2
Lösung Aufgabe 3 (1) namespace FL = Flood; FL::Perceptron ex3Horiz(2), ex3Diag(2), ex3BlackCross(2), ex3GreenCircle(2), ex3BlueSquare(2); void initExercise3Perceptrons() { ex3Horiz.set_activation_function(FL::Perceptron::Linear); [...] ex3Horiz.set_bias(1.5); FL::Vector ex3hWeights(2); ex3hWeights[0] = 0.0; ex3Horiz.set_synaptic_weights(ex3hWeights);
ex3hWeights[1] = -1.0;
ex3Diag.set_bias(-2.25); FL::Vector ex3dWeights(2); ex3dWeights[0] = 0.5; ex3Diag.set_synaptic_weights(ex3dWeights);
ex3dWeights[1] = 0.5;
ex3BlackCross.set_bias(-0.5); FL::Vector ex3bcWeights(2); ex3bcWeights[0] = 1.0; ex3BlackCross.set_synaptic_weights(ex3bcWeights); ex3GreenCircle.set_bias(0.25); FL::Vector ex3gcWeights(2); ex3gcWeights[0] = -0.5; ex3GreenCircle.set_synaptic_weights(ex3gcWeights); ex3BlueSquare.set_bias(-0.5); FL::Vector ex3bsWeights(2); ex3bsWeights[0] = 0.0; ex3BlueSquare.set_synaptic_weights(ex3bsWeights); }
Dipl.-Inform. Martin Lösch Labor „Wissensbasierte Systeme“
Neuronale Netze – Aufgaben 2
ex3bcWeights[1] = 0.0;
ex3gcWeights[1] = -0.5;
ex3bsWeights[1] = 1.0;
3
Lösung Aufgabe 3 (1) void calculateExercise3(double* signals) { FL::Vector inputSignals(2); inputSignals[0] = signals[0]; inputSignals[1] = signals[1]; double horizRes = ex3Horiz.calculate_output (inputSignals); inputSignals[0] = signals[0]; inputSignals[1] = signals[1]; double diagRes = ex3Diag.calculate_output (inputSignals); inputSignals[0] = horizRes; inputSignals[1] = diagRes; double bcRes = ex3BlackCross.calculate_output (inputSignals); inputSignals[0] = horizRes; inputSignals[1] = diagRes; double gcRes = ex3GreenCircle.calculate_output (inputSignals); inputSignals[0] = horizRes; inputSignals[1] = diagRes; double bsRes = ex3BlueSquare.calculate_output (inputSignals); cout