更新时间:
- 2017.5.9 简化了很多不需要的内容,关注重点。
- 2019.4.17 更新到tensorflow 2.x,添加自动求导和新版本的optimizer
因为tensorflow 2.x
相对于tensorflow 1.x
的变动,API变更和思路也变化了,这节重点介绍的为梯度带(GradientTape)和优化器(Optimizer)
因为大多数机器学习任务就是最小化损失,在损失定义的情况下,后面的工作就交给优化器啦。因为深度学习常见的是对于梯度的优化,也就是说,优化器最后其实就是各种对于梯度下降算法的优化。
一.梯度带tf.GradientTape
梯度带是新版本tensorflow非常常用的一个特性了,因为一旦涉及到计算梯度的问题就离不开这个新的API,下面通过几个例子来介绍一下这个API。首先说明,下面的几个例子比较偏底层一点,需要非常少量和简单的一元和多元微分的知识。
例一:一元和二元求导
import tensorflow as tf
def gradient_test():
#-------------------一元梯度案例---------------------------
print("一元梯度")
x=tf.constant(value=3.0)
with tf.GradientTape(persistent=True,watch_accessed_variables=True) as tape:
tape.watch(x)
y1=2*x
y2=x*x+2
y3=x*x+2*x
#一阶导数
dy1_dx=tape.gradient(target=y1,sources=x)
dy2_dx = tape.gradient(target=y2, sources=x)
dy3_dx = tape.gradient(target=y3, sources=x)
print("dy1_dx:"