I 1 die Eingangsschicht habe, 2 verborgene Schichten und 1 Ausgang Schicht und für ein einzelnes Trainingsbeispiel x mit dem Ausgang y I berechnet habe folgende:Gradientenabstieg vektorisiert Berechnung Abmessungen nicht korrekt
x = [1;0;1];
y = [1;1;1];
theta1 =
4.7300 3.2800 1.4600
0 0 0
4.7300 3.2800 1.4600
theta2 =
8.8920 8.8920 8.8920
6.1670 6.1670 6.1670
2.7450 2.7450 2.7450
theta3 =
9.4460 6.5500 2.9160
9.3510 6.4850 2.8860
8.8360 6.1270 2.7270
THETA1 steuert Zuordnung zwischen Eingang Schicht und layer1 tHETA2 Zuordnung zwischen layer1 und Layer2 steuert theta3 Zuordnung zwischen Layer2 steuert und die Ausgangsschicht
Aber Gradientenabstiegsverfahren verwendet zu berechnen: theta(i) = theta(i) - (alpha/m .* (x .* theta(i)-y)' * x)'
wobei i = 1, 2 oder 3 die Abmessungen von x und y sind falsch. Die Dimensionen sind korrekt (mit korrekter Bedeutung kann die Theta-Berechnung ohne Fehler ausgeführt werden), wenn x und y 1x9 statt 1x3 sind. Muss ich die Architektur meines neuronalen Netzwerks ändern oder kann ich einfach x und y auf
setzen x = [1; 0; 1; 0; 0; 0; 0; 0; 0]; y = [1; 1; 1; 0; 0; 0; 0; 0; 0]; damit die Matrixmultiplikation funktioniert?
Update:
alpha=learning rate (.00001)
m=number of training examples (1)
theta(i) refers to theta1,theta2,theta3
Ich bin vektorisiert Gradientenabfallsaktualisierung mit wie bei Vectorization of a gradient descent code
Update2 beschrieben:
Dieser MATLAB-Code scheint zu funktionieren:
m = 1;
alpha = .0000001;
x = [1;0;1];
y = [1; 1; 1];
theta1 = [4.7300 3.2800 1.4600; 0 0 0; 4.7300 3.2800 1.4600];
theta1 = theta1 - (alpha/m) * (x' * (theta1 * x - y));
ist theta1 = theta1 - (alpha/m) * (x' * (theta1 * x - y));
korrekte Umsetzung von vektorisierten Gr adient Abstieg?
Ich verstehe, dass dies Probleme beim Abrollen von Theta-Matrizen zu Theta-Vektoren verursachen wird, da die Dimensionen nicht gleich sein werden, aber für das Arbeiten mit Theta-Matrizen anstelle von Theta-Vektoren ist das korrekt?
Update: Formel von Vectorization of a gradient descent code modifiziert wird, wo Gradientenabfallsaktualisierung gegeben ist als: theta = theta - (alpha/m) * (X' * (X*theta-y));
ich es theta = theta - (alpha/m) * (x' * (theta * x - y));
verändert, so verändert (X*theta-y);
-(theta * x - y);
Die Aussage 'x. * Theta (i)' scheint fischig, da die Dimensionen nicht übereinstimmen, egal ob 'x' 1x3 oder 1x9 ist. Könntest du ein paar Dinge in deinem Post erklären: Ist 'theta (i)' etwas, das tatsächlich in deinen Code geschrieben wurde, oder schreibst du es nur hier, um sich gleichzeitig auf 'theta1',' theta2' oder 'theta3' zu beziehen? Sind 'alpha' und' m' Konstanten? – Geoff
@Geoff siehe Frage Update 'Die Aussage x.* Theta (i) scheint fischig, da die Dimensionen nicht übereinstimmen. Ich stimme zu, ich bin mir nicht sicher, ob es ein Problem mit meiner Netzwerkarchitektur oder etwas anderes ist. –