TensorFlow2.0自动求导机制(tf.GradientTape的用法)


在机器学习中,我们经常需要计算函数的导数,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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值