Single-layer neural network
Für die Implementierung von single-layer neural network, ich habe zwei Daten-Dateien.
In:
0.832 64.643
0.818 78.843
Out:
0 0 1
0 0 1
Oben ist das format von 2 Daten-Dateien.
Ziel Ausgang ist "1" für eine bestimmte Klasse, die die entsprechende Eingabe gehört, und "0" für die restlichen 2 Ausgänge.
Das problem ist wie folgt:
Ihre single-layer neuronale Netzwerk wird
finden (3 von 2 matrix) und b (3, indem Sie 1
Vektor) in Y = A*X + b wobei Y [C1,
C2, C3]' und X [x1, x2]'.Um das problem zu lösen, die oben mit einem
neuronales Netz, wir können wieder schreiben
Gleichung wie folgt: Y = A' * X', wo
A' = [A b] (3 x 3 matrix) und X' ist
[x1, x2, 1]'Nun können Sie mit Hilfe eines neuronalen Netzes mit
drei input-Knoten (einen für x1, x2 und
1 jeweils) und drei Ausgänge (C1,
C2, C3).Den daraus resultierenden 9 (da wir 9
verbindungen zwischen den 3 Eingänge und 3
Ausgänge) GEWICHTE entspricht
Elemente Einer matrix.
Im Grunde genommen, versuche ich, so etwas zu tun, aber es funktioniert nicht:
function neuralNetwork
load X_Q2.data
load T_Q2.data
x = X_Q2(:,1);
y = X_Q2(:,2);
learningrate = 0.2;
max_iteration = 50;
% initialize parameters
count = length(x);
weights = rand(1,3); % creates a 1-by-3 array with random weights
globalerror = 0;
iter = 0;
while globalerror ~= 0 && iter <= max_iteration
iter = iter + 1;
globalerror = 0;
for p = 1:count
output = calculateOutput(weights,x(p),y(p));
localerror = T_Q2(p) - output
weights(1)= weights(1) + learningrate *localerror*x(p);
weights(2)= weights(1) + learningrate *localerror*y(p);
weights(3)= weights(1) + learningrate *localerror;
globalerror = globalerror + (localerror*localerror);
end
end
Schreibe ich diese Funktion in eine andere Datei und der Aufruf in meinem vorherigen code.
function result = calculateOutput (weights, x, y)
s = x * weights(1) + y * weights(2) + weights(3);
if s >= 0
result = 1;
else
result = -1;
end
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kann ich vor Ort ein paar Probleme mit dem code. Das Hauptproblem ist, dass das Ziel ist multi-Klasse (nicht binäre), so müssen Sie entweder 3 output-Knoten eine für jede Klasse (genannt 1-aus-N-Kodierung), oder verwenden Sie eine einzelne Ausgabe-Knoten mit einem anderen Aktivierung Funktion (etwas, das in der Lage mehr als nur die binäre Ausgabe -1/1 oder 0/1)
In der Lösung unterhalb der perceptron hat die folgende Struktur:
Den Ergebnissen der Ausbildung über die fünf Muster zur Verfügung:
Beachten Sie, dass die Daten verwendet werden in den Beispiel oben enthält nur 5 Proben. Sie würden mehr sinnvolle Ergebnisse, wenn Sie hatte mehr Trainings-Instanzen in jeder Klasse.