Tensorflow(十九) —— 梯度下降简介

本文介绍了Tensorflow中的自动微分机制,包括使用GradientTape进行一阶导数计算,以及如何通过persistent=True进行多次梯度计算。同时,展示了如何计算二阶导数,为理解梯度下降法提供了基础。内容覆盖了Tensorflow中的核心概念,适合深度学习初学者学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. Auoto Grad

# ****************** Auoto Grad
with tf.GradientTape() as tape:
    build computation graph
    loss = f(x)
[w_grad] = tape.gradient(loss,[w])

2. 一阶导数

# ****************** 一阶导数
w = tf.constant(1.)
x = tf.constant(2.)

y = x*w

with tf.GradientTape() as tape:
    tape.watch([w])
    y1 = x*w
try :
    [w_grad] = tape.gradient(y,[w])
    print("w_grad:",w_grad)
except Exception as error:
    print("error:",error)

with tf.GradientTape() as tape:
    tape.watch([w])
    y1 = x*w
[w_grad1] = tape.gradient(y1,[w])
print("w_grad1:",w_grad1.numpy())

w = tf.Variable(w)
with tf.GradientTape() as tape:
    y1 = x*w
print("w_grad2:",w_grad1.numpy())

3. GradientTape(persistent = True)

# ********************** GradientTape(persistent = True)
"""
tape 进行一次.gradient()梯度计算后便会释放掉相关信息,
若想多次进行梯度计算,则应将persistent参数设置为True,
但是计算完毕后 应将tape关闭
"""
x = tf.Variable(tf.constant(2.))
w = tf.Variable(tf.constant(5.))

with tf.GradientTape(persistent = True) as tape:
    y = x*w

[grad1] = tape.gradient(y,[x])
print("grad1:",grad1.numpy())

[grad2] = tape.gradient(y,[w])
print("grad2:",grad2.numpy())

4. 计算二阶导数

# ******************** 计算二阶导数
x = tf.Variable(tf.constant(5.))
y = tf.Variable(tf.constant(2.))

with tf.GradientTape() as tape1:
    with tf.GradientTape() as tape2:
        z = x**2 + y**2 + x*y
    [dz_dy] = tape2.gradient(z,[y])
    print("dz_dy:",dz_dy.numpy())
[d2z_dy2] = tape1.gradient(dz_dy,[y])
print("d2z_dy2:",d2z_dy2.numpy())

本文为参考龙龙老师的“深度学习与TensorFlow 2入门实战“课程书写的学习笔记

by CyrusMay 2022 04 17

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值