Seite 1 von 1

Tensorflow: Neuronales Netz ableiten

Verfasst: Samstag 23. Oktober 2021, 23:45
von Üpsilon
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:

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]))
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.

Re: Tensorflow: Neuronales Netz ableiten

Verfasst: Montag 25. Oktober 2021, 22:46
von Üpsilon
Nicht alle auf einmal :)

Ist die Frage schlecht gestellt, fehlen im Beitrag oben irgendwelche Infos, oder ist das Thema zu speziell?

Re: Tensorflow: Neuronales Netz ableiten

Verfasst: Dienstag 26. Oktober 2021, 06:22
von ThomasL
Das Problem (für mich) ist, dass dies 4-jahre alter Tensorflow Code ist. Als ich mit Tensorflow angefangen habe, war dies schon veraltet und ich habe direkt mit Keras gearbeitet, welches einem ja eine Menge dieses umständlichen Codes abnimmt. Wenn du das umsetzen willst auf aktuellen TF 2.x Code müsstest du dich in alte Dokus von vor 5 Jahren einarbeiten. Ich habe dazu nicht die Zeit und auch nicht unbedingt die Lust. :-)