TensorFlow中的自动微分
2021-09-19 本文已影响0人
LabVIEW_Python
自动微分可以极大的减少开发者实现反向传播算法的代码量,现在各家AI框架都有自动微分功能。TensorFlow的自动微分通过 tf.GradientTape
API函数来实现,即计算tf.Variable
的梯度。
TensorFlow 会将在 tf.GradientTape
上下文内执行的相关运算“记录”到“条带(Tape)”上,然后使用条带(Tape)通过反向模式微分计算“已记录的”计算的梯度
具体代码实现如下:
- 第一步,利用带条(Tape)记录相关运算:
w = tf.Variable([[2.0]])
with tf.GradientTape() as tape:
loss = w*w*w + 2*w*w
- 第二步,使用
GradientTape.gradient(target, sources)
计算某个目标(target,通常是损失)相对于某个源(sources, 通常是模型变量)的梯度
# d_loss = 3w*w + 4*w
d_loss = tape.gradient(loss, w)
print(grad)
范例代码:求Sine函数的微分
import tensorflow as tf
import matplotlib.pyplot as plt
x = tf.linspace(-3.14,3.14,200+1)
with tf.GradientTape() as tape:
tape.watch(x)
y = tf.sin(x)
dy_dx = tape.gradient(y, x)
plt.plot(x,y,label='y')
plt.plot(x,dy_dx, label="dy_dx")
plt.legend()
plt.xlabel('x')
plt.show()
运行结果