1、反向传播
利用损失函数对w的导数,来更新w
但是对于复杂模型,有成千上万个参数,无法直接给出固定的显示的损失函数解析式。反向传播就是为了解决这个问题。
每计算一层,就会使得最终的W和b不断调整,这样就实现了参数逼近的过程
2、前向传播
前馈计算loss,反向计算导数
如果要计算∂ L o s s \∂w,按照你做题的思路求导,首先计算出各个导数的式子,再代入计算。
程序中也是如此,按照链式法则进行求导计算,从最底层出发,将各个导数值和函数值都计算出来。
构建计算图可以直接用张量计算,构建权重时必须使用data计算。
每进行一次计算,计算图就会动态更新一次。由y和ytrain进行比较得出loss。
3、tensor
Tensor是TensorFlow中的基本数据类型,
Tensor中主要元素的是Data(数据)和Grad(导数)
4、课程实验
for epoch in range(100):
for x, y in zip(x_data, y_data):
l = loss(x, y) ##1.计算loss(前向)
l.backward() ##2.计算偏导并保存在变量中(后向传播)
print('\tgrad:', x, y, w.grad.item())
w.data = w.data - 0.01 * w.grad.data #3. 用梯度下降做更新
w.grad.data.zero_()# grad 设置为0
代码注释中的 1 2 3 步 可以看下面的图