本文目录
- 前馈计算
- 反向传播过程
- Tensor in PyTorch
- 课堂练习:线性模型 Linear Model
- 实现代码
- 结果
- 课后练习
- 学习资料
- 系列文章索引
权重维度增加,层数增加,模型变得复杂
但是化简后仍是线性,因此增加层数意义不大
引入激活函数,从而增加非线性
Tenso(张量):PyTorch中存储数据的基本元素。
Tensor两个重要的成员,data和grad。(grad也是个张量)
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)))
1. 计算y=xw的梯度
2. 计算仿射模型y=xw+b的梯度
3. 使用计算图计算y=w1x^2+w2x+b的梯度
4. 使用Pytorch计算y=w1x^2+w2x+b的梯度
二次模型 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深度学习实践》完结合集】 https://www.bilibili.com/video/BV1Y7411d7Ys?share_source=copy_web&vd_source=3d4224b4fa4af57813fe954f52f8fbe7
- 线性模型 Linear Model
- 梯度下降 Gradient Descent
- 反向传播 Back Propagation
- 用PyTorch实现线性回归 Linear Regression with Pytorch
- 逻辑斯蒂回归 Logistic Regression
- 多维度输入 Multiple Dimension Input
- 加载数据集Dataset and Dataloader
- 用Softmax和CrossEntroyLoss解决多分类问题(Minst数据集)
- CNN基础篇——卷积神经网络跑Minst数据集
- CNN高级篇——实现复杂网络
- RNN基础篇——实现RNN
- RNN高级篇—实现分类