文章目录
掌握神经网络正向传播与反向传播,tf.GradientTape求导机制以及自定义模型训练操作
1.神经网络的正向传播与反向传播
需要具体了解
2.自动求导机制
梯度求解利器:tf.GradientTape
GradientTape是eager模式下计算梯度用的
GradientTape是eager模式下计算梯度用的
watch(tensor)
作用:确保某个tensor被tape追踪
参数:tensor: 一个Tensor或者一个Tensor列表
gradient(target, sources)
作用:根据tape上面的上下文来计算某个或者某些tensor的梯度参数
target: 被微分的Tensor或者Tensor列表,你可以理解为经过某个函数之后的值
sources: Tensors 或者Variables列表(当然可以只有一个值). 你可以理解为函数的某个变量
返回:
一个列表表示各个变量的梯度值,和source中的变量列表一一对应,表明这个变量的梯度。
上面的例子中的梯度计算部分可以更直观的理解这个函数的用法。
举例:计算y= x2在x=3时的导数**
import tensorflow as tf
x = tf.constant(3.0)
with tf.GradientTape() as g:
# watch作用:确保每个tensor被tape追踪
g.watch(x)
y = x*x
# 求导
# gradient作用是:根据tape来计算某个或某些tensor的梯度,即y导 = 2*x = 2*3 =6
dy_dx = g.gradient(y,x)
print(dy_dx)
# tf.Tensor(6.0, shape=(), dtype=float32)
loss_object = tf.keras.losses.