假设我有一个具有两个输入的神经网络:
(x, t) —> [神经网络] —> u(x,t)
我需要计算du(x,t)/dx, du(x,t)/dt,并且最重要的是部分导数d/dx[du(x,t)/dt]
我设法创建了这个代码,它可以无错误运行,但导数结果为None。请问有人可以帮助我吗?
更新 – 我已经解决了这个问题
for epoch in range(epochs): print("\nStart of epoch %d" % (epoch, )) for step, (x, t) in enumerate(self.get_data()): x = tf.constant(x) t = tf.constant(t) with tf.GradientTape(persistent=True) as tape_ord_2: tape_ord_2.watch((x, t)) with tf.GradientTape(persistent=True) as tape_ord_1: tape_ord_1.watch((x, t)) tensor_data = tf.cast([[x, t]], tf.float32) u = self.model(tensor_data, training=True) u_x = tape_ord_1.gradient(u, x) u_t = tape_ord_1.gradient(u, t) u_xx = tape_ord_2.gradient(u_x, x) u_tt = tape_ord_2.gradient(u_t, t) u_xt = tape_ord_2.gradient(u_x, t) u_tx = tape_ord_2.gradient(u_t, x) # 这些应该是相同的,而且它们确实相同 print('u_xt: {}, u_tx: {}'.format(u_xt, u_tx))
回答:
感谢@EdvBeq的更新。为了社区的利益,在此提供解决方案。
输出:
TensorFlow version: 2.4.1Eager execution: TrueStart of epoch 0u_xt: 0.004451256711035967, u_tx: 0.0044512562453746796Start of epoch 1u_xt: 0.004451256711035967, u_tx: 0.0044512562453746796