tf.GradientTape自动微分机制

tf.GradientTape是可以记录Tensorflow中自动微分的操作,如果计算操作在tf.GradientTape下执行,并且至少有一个输入被“监视”,那么该操作就会被记录。使用方法:

import tensorflow as tf

x = tf.Variable(0.0, dtype=tf.float32)  # 变量Variable将会被自动“监视”
# 常量
a = tf.constant(1.0, dtype=tf.float32)
b = tf.constant(-2.0, dtype=tf.float32)
c = tf.constant(1.0, dtype=tf.float32)

with tf.GradientTape() as tape:
    tape.watch([c])				# 手动使用watch函数监视常量c
    y = a*tf.pow(x, 2)+b*x+c   # 函数f(x) = a*x**2 + b*x + c

dy_dx, dy_dc = tape.gradient(y, [x, c]) # 求f(x)关于x=0,c=1的导数
print(dy_dx, dy_dc)

# 输出 tf.Tensor(-2.0, shape=(), dtype=float32) tf.Tensor(1.0, shape=(), dtype=float32)
与优化器配合求函数的最小值
import tensorflow as tf

x = tf.Variable(0.0, dtype=tf.float32)
a = tf.constant(1.0, dtype=tf.float32)
b = tf.constant(-2.0, dtype=tf.float32)
c = tf.constant(1.0, dtype=tf.float32)

optimizer = tf.keras.optimizers.SGD(learning_rate=0.01)
for _ in tf.range(1000):
    with tf.GradientTape() as tape:
        y = a*tf.pow(x, 2)+b*x+c
    dy_dx=tape.gradient(y,x)
    optimizer.apply_gradients(grads_and_vars=[(dy_dx, x)])

tf.print("y =", y, "; x =", x)

# 输出 y = 0 ; x = 0.999998569

tf.keras.optimizers.SGD()会返回一个随机梯度下降优化器,这里我们令其学习率a = 0.01,优化器的apply_gradients函数将会将梯度应用到变量上,令变量值朝着梯度方向改变。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值