Tensorflow: Neuronales Netz ableiten
Verfasst: Samstag 23. Oktober 2021, 23:45
Hallo,
ich möchte im Prinzip das Gleiche machen was hier gemacht wird:
https://github.com/maziarraissi/PINNs/b ... Burgers.py
In meinen Worten: Man hat eine Differentialgleichung, und man hat für eine Lösung der Differentialgleichung Werte an gewissen Punkten gegeben. Jetzt fittet man ein neuronales Netz an diese Lösung regressionsmäßig ran. Allerdings soll das Netz die Differentialgleichung respektieren. Deswegen leitet man das Netz ab, und man packt in die Loss-Funktion auch noch Terme rein, die messen, wie weit die Ableitung des Netzes von den Werten entfernt liegt, die die Ableitung nach der Differentialgleichung haben soll. Dieses Prinzip nennt sich "physics informed neural networks".
(Das ist noch nicht alles was hier gemacht werden soll, es geht noch damit weiter, dass die Differentialgleichung von einem unbekannten Parameter abhängt und man dann herausfinden will, welcher Parameter zur gegebenen Lösung passt.)
Offenbar ist der verlinkte Code aber für eine alte Tensorflow-Version geschrieben. Deswegen versuche ich jetzt, das für die neue Version mittels tf.keras nachzumachen. Das ist das erste Mal, dass ich Tensorflow benutze.
Ich bekomme es nun nicht hin, das Netz so abzuleiten. Bis jetzt habe ich:
Da kommt immerhin ein Tensorobjekt mit einer Zahl als Ableitung raus.
Allerdings: so wie ich den oben verlinkten Code verstehe (ausführen kann ich ihn ja nicht ^^), wird dort nicht "mit Zahlen" abgeleitet, sondern das neuronale Netz wird mit lauter tf.placeholder-Objekten belegt (und die gibt es im neuen Tensorflow nicht mehr), und dann wird mit den Platzhaltern "abstrakt" abgeleitet, und erst später, beim Training, werden Zahlen eingesetzt. Falls ich das richtig verstehe: so möchte ich es auch machen.
Kann mir jemand einen Tipp geben, wie das geht?
€: Ich bin durch herumsuchen auch schon auf die "Keras Functional API" https://www.tensorflow.org/guide/keras/functional gestoßen, aber damit kriege ich das auch nicht hin.
ich möchte im Prinzip das Gleiche machen was hier gemacht wird:
https://github.com/maziarraissi/PINNs/b ... Burgers.py
In meinen Worten: Man hat eine Differentialgleichung, und man hat für eine Lösung der Differentialgleichung Werte an gewissen Punkten gegeben. Jetzt fittet man ein neuronales Netz an diese Lösung regressionsmäßig ran. Allerdings soll das Netz die Differentialgleichung respektieren. Deswegen leitet man das Netz ab, und man packt in die Loss-Funktion auch noch Terme rein, die messen, wie weit die Ableitung des Netzes von den Werten entfernt liegt, die die Ableitung nach der Differentialgleichung haben soll. Dieses Prinzip nennt sich "physics informed neural networks".
(Das ist noch nicht alles was hier gemacht werden soll, es geht noch damit weiter, dass die Differentialgleichung von einem unbekannten Parameter abhängt und man dann herausfinden will, welcher Parameter zur gegebenen Lösung passt.)
Offenbar ist der verlinkte Code aber für eine alte Tensorflow-Version geschrieben. Deswegen versuche ich jetzt, das für die neue Version mittels tf.keras nachzumachen. Das ist das erste Mal, dass ich Tensorflow benutze.
Ich bekomme es nun nicht hin, das Netz so abzuleiten. Bis jetzt habe ich:
Code: Alles auswählen
model = tf.keras.Sequential(
[tf.keras.layers.Dense(n_neurons, activation="tanh", input_shape=(1,))]
+ [tf.keras.layers.Dense(n_neurons, activation="tanh") for _ in range(n_layers-1)]
+ [tf.keras.layers.Dense(1)])
model.compile(optimizer="adam", loss="mse", metrics="mse")
with tf.GradientTape() as tape:
xx = tf.Variable([[1.]])
yy = model(xx)
print(tape.gradient(yy, [xx]))
Allerdings: so wie ich den oben verlinkten Code verstehe (ausführen kann ich ihn ja nicht ^^), wird dort nicht "mit Zahlen" abgeleitet, sondern das neuronale Netz wird mit lauter tf.placeholder-Objekten belegt (und die gibt es im neuen Tensorflow nicht mehr), und dann wird mit den Platzhaltern "abstrakt" abgeleitet, und erst später, beim Training, werden Zahlen eingesetzt. Falls ich das richtig verstehe: so möchte ich es auch machen.
Kann mir jemand einen Tipp geben, wie das geht?
€: Ich bin durch herumsuchen auch schon auf die "Keras Functional API" https://www.tensorflow.org/guide/keras/functional gestoßen, aber damit kriege ich das auch nicht hin.