$Title Training eines zweischichtigen Feedforward-Netzes $Ontext Training eines zweischichtigen Feedforward-Netzes mit Sigmoid-Einheiten aus der Vorlesung Betriebliche Planung von Energiesystemen - Model - Author: Christoph Schwindt Date: 06/12/2019 $Offtext $eolcom// $include training_data.gms variables E Trainingsfehler (Zielfunktion) o(mu,i) Wert der Transferfunktion von Einheit i fuer Instanz x_mu alpha(mu,i) Wert der Aktivitaetsfunktion von Einheit i fuer Instanz x_mu w(i,j) Gewicht des Pfeils von Einheit i zu Einheit j w0(i) Schwellwert der Einheit i ; equations def_E Definition des Trainingsfehlers def_transfer(mu,i) Definition der Transferfunktion def_activity_hidden(mu,i) Definition der Aktivitaetsfunktion der verdeckten Einheiten def_activity_output(mu,j) Definition der Aktivitaetsfunktion der Ausgabeeinheiten ; def_E.. E =e= 1/2*sum((mu,j)$out(j), sqr(c(mu,j)-o(mu,j))) ; def_transfer(mu,i)$(hid(i) or out(i)).. o(mu,i) =e= 1/(1+exp(-alpha(mu,i))) ; def_activity_hidden(mu,i)$hid(i).. alpha(mu,i) =e= sum(h$inp(h), w(h,i)*x(mu,h)) - w0(i) ; def_activity_output(mu,j)$out(j).. alpha(mu,j) =e= sum(i$hid(i), w(i,j)*o(mu,i)) - w0(j) ; model training / all / ; options nlp = baron optcr = 1e-3 reslim = 60 ; solve training using nlp minimzing E ; w.fx(i,j)$(inp(i) and (inp(j) or out(j))) = 0 ; w.fx(i,j)$(hid(i) and (inp(j) or hid(j))) = 0 ; w.fx(i,j)$out(i) = 0 ; w0.fx(h)$inp(h) = 0 ; // Eingabeeinheiten sind keine Neuronen alpha.fx(mu,h)$inp(h) = 0 ; o.fx(mu,h)$inp(h) = 0 ; parameters hypothesis(mu,j) ; hypothesis(mu,j)$out(j) = o.l(mu,j) ; display E.l, w.l, w0.l, c, hypothesis ; ***** Erzeuge zufaellige neue Instanz ***** parameters x_new(i) neue Instanz c_new(i) Wert der Targetfunktion o_new(i) Wert der Transferfunktion fuer Einheit i alpha_new(i) Wert der Aktivitaetsfunktion fuer Einheit i output(i) Ausgabe des Netzes ; execseed = 1 + gmillisec(jnow) ; // setze zufaelligen Seed x_new(i)$inp(i) = uniform(0,1) ; c_new('i6') = x_new('i1')*x_new('i2') ; c_new('i7') = sqrt(c_new('i6')) ; c_new('i8') = sqr(c_new('i6')) ; c_new('i9') = 2**(c_new('i6')-1) ; alpha_new(i)$hid(i) = sum(h$inp(h), w.l(h,i)*x_new(h)) - w0.l(i) ; o_new(i)$hid(i) = 1/(1+exp(-alpha_new(i))) ; alpha_new(j)$out(j) = sum(i$hid(i), w.l(i,j)*o_new(i)) - w0.l(j) ; o_new(j)$out(j) = 1/(1+exp(-alpha_new(j))) ; output(j)$out(j) = o_new(j) ; display x_new, c_new, output ;