在机器学习中,我们经常需要计算函数的导数,Tensorflow提供了自动求导机制来计算导数。
1 使用tf.GradientTape()计算 y = x 2 y=x^2 y=x2的导数
计算当x为3时x平方的导数(注意,变量x要设置为浮点型,不能为整型)
import tensorflow as tf # tf为2.*版本 python版本为3.6
x = tf.Variable(initial_value = 3.0) # 定义变量x,初始化为3
with tf.GradientTape() as tape: # 在tf.GradientTape()的上下文中,所有的计算步骤都会被记录,用以求导
y = tf.square(x) # y = x的平方
y_grad = tape.gradient(y,x) # 计算y关于x的导数
print(y) # 输出3的平方 tf.Tensor(9.0, shape=(), dtype=float32)
print(y_grad) # 求出导数为6 tf.Tensor(6.0, shape=(), dtype=float32)
输出:
tf.Tensor(9.0, shape=(), dtype=float32)
tf.Tensor(6.0, shape=(), dtype=float32)
在这里定义了一个变量x,使用tf.variable()声明,与普通张量一样,该变量拥有形状、类型和值这3种属性。变量与普通张量的一个重要区别是,它默认能够被Tensorflow的自动求导机制求导,因此常用于定义机器模型的参数。
补充知识:tf.Variable () 将变量标记为“可训练”,被标记的变量会在反向传播中记录梯度信息。神经网络训练中,常用该函数标记待训练参数。
2 当使用常量tf.constant时
上面的例子中使用了tf.Variable()定义x,下面我们展示使用tf.constant()定义x,注意两者之间求导时的不同,需要tape.watch(x)
import tensorflow as tf # tf为2.x版本
x = tf.constant(3.0) # 定义常量x,初始化为3.0 (浮点型)
with tf.GradientTape() as tape:
tape

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



