u_xx = tf.gradients(u_x, x)[0] / self.sigma_x
在复现论文pinn求解pde方程组的解时,遇到这样一巨代码,代码基于tensorflow1版本,许多地方与2版本不一样,1版本写得更详细,但是代码也更长。为了理解每行代码,尝试使用2版本复现,但是可参考的较少,每个人不理解的地方不太一样。希望记录下来,有需求时自查。
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior() # 将TensorFlow 1.x和2.x之间所有不同的全局行为切换为预定的1.x行为
t= tf.Variable(2.0,name='t')
x = tf.Variable(1.0,name='x')
z1 = 3 * t + 2 * x
grads1 = tf.gradients(z1, t)[0]
grads1_test=tf.gradients(z1,t)
grads21=tf.gradients(z1,[t,x])
grads21_test=tf.gradients(z1,[t,x])[0]
grads22_test=tf.gradients(z1,[t,x])[1]
with tf.Session() as sess:
print(sess.run(grads1)) # 输出列表的第一个数值3.0
print(sess.run(grads1_test)) # 输出列表[3.0]
print(sess.run(grads21)) # 输出列表 [3.0, 2.0]
print(sess.run(grads21_test)) # 输出列表的第一个数值3.0
print(sess.run(grads22_test)) # # 输出列表的第二个数值2.0
中1版本要想打印输出tensorflow的数值形式,需要使用with tf.Session() as sess:结构
尝试发现,将tensorflow转成数值形式时,输出结果默认是列表,需要使用索引[0],[1]等,取出对应位置的梯度值,才能参与后续代码的计算。