《PyTorch深度学习实践》Lecture_04 反向传播 Back Propagation

B站刘二大人老师的《PyTorch深度学习实践》Lecture_04 重点回顾+手记+代码复现+知识补充

Lecture_04 反向传播 Back Propagation

一、重点回顾

(一)计算图 Computational Graph

1. 简单网络的梯度计算

在这里插入图片描述

(1)线性模型的计算图实例

在这里插入图片描述

2. 复杂网络的梯度计算
(1) 两层神经网路

在这里插入图片描述

(2)存在问题

在这里插入图片描述

(3)问题解决

在这里插入图片描述

(二)链式法则 Chain Rule

在这里插入图片描述

(1)使用链式法则进行梯度计算

在这里插入图片描述

(2)使用链式法则进行梯度计算实例

在这里插入图片描述

二、手记

【Lilo】反向传播 Back Propagation

三、代码复现

(一)线性模型 Linear Model

import torch

# 已知数据:
x_data = [1.0,2.0,3.0]
y_data = [2.0,4.0,6.0]
# 线性模型为y = wx, 预测x = 4时, y的值

# 假设 w = 1
w = torch.Tensor([1.0])
w.requires_grad = True

# 定义模型:
def forward(x):
	return x*w

# 定义损失函数:
def loss(x,y):
	y_pred = forward(x)
	return (y_pred - y)**2

print("Prediction before training:",4,'%.2f'%(forward(4)))

for epoch in range(100):
	for x, y in zip(x_data,y_data):
		l = loss(x,y)
		l.backward() # 对requires_grad = True的Tensor(w)计算其梯度并进行反向传播,并且会释放计算图进行下一次计算
		print("\tgrad:%.1f %.1f %.2f" % (x,y,w.grad.item()))
		w.data = w.data - 0.01 * w.grad.data # 通过梯度对w进行更新
		w.grad.data.zero_() #梯度清零
	print("Epoch:%d, w = %.2f, loss = %.2f" % (epoch,w,l.item()))

print("Prediction after training:",4,'%.2f'%(forward(4)))

(二)二次模型 Quadratic Model

import torch

# 已知数据:
x_data = [1.0,2.0,3.0]
y_data = [6.0,11.0,18.0]
# 线性模型为y = w1x²+w2x+b时, 预测x = 4时, y的值

# 假设 w = 1, b = 1
w1 = torch.Tensor([1.0])
w1.requires_grad = True
w2 = torch.Tensor([1.0])
w2.requires_grad = True
b = torch.Tensor([1.0])
b.requires_grad = True

# 定义模型:
def forward(x):
	return x*x*w1+x*w2+b

# 定义损失函数:
def loss(x,y):
	y_pred = forward(x)
	return (y_pred - y)**2

print("Prediction before training:",4,'%.2f'%(forward(4)))

for epoch in range(1000):
	for x, y in zip(x_data,y_data):
		l = loss(x,y)
		l.backward() # 对requires_grad = True的Tensor(w)计算其梯度并进行反向传播,并且会释放计算图进行下一次计算
		w1.data = w1.data - 0.02 * w1.grad.data # 通过梯度对w进行更新
		w2.data = w2.data - 0.02 * w2.grad.data
		b.data = b.data - 0.02 * b.grad.data
		w1.grad.data.zero_()
		w2.grad.data.zero_() 
		b.grad.data.zero_() # 梯度清零
	print("Epoch:%d, w1 = %.4f,w2 = %.4f,b = %.4f, loss = %.4f" % (epoch,w1,w2,b,l.item()))

print("Prediction after training:",4,'%.4f'%(forward(4)))

四、知识补充

(一)自动求梯度

《动手学深度学习》(PyTorch版)

(二)PyTorch 的 Autograd

【知乎】PyTorch 的 Autograd

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值