Pytorch深度学习实践(b站刘二大人)P5讲(用Pytorch实现线性回归)
用Pytorch实现线性回归:1.准备数据集2.设计模型(计算y_pred)3.构造损失函数和优化器4.训练周期(前馈、反馈、更新)1.准备数据集x_data = torch.Tensor([[1.0] ,[2.0], [3.0]])y_data = torch.Tensor([[2.0], [4.0], [6.0]])2.设计模型(计算y_pred)我们的模型类应该从nn.Module继承,它是
用Pytorch实现线性回归:
1.准备数据集
2.设计模型(计算y_pred)
3.构造损失函数和优化器
4.训练周期(前馈、反馈、更新)
1.准备数据集
x_data = torch.Tensor([[1.0] ,[2.0], [3.0]])
y_data = torch.Tensor([[2.0], [4.0], [6.0]])
其中x、y分别是3 *1的矩阵
2.设计模型(计算y_pred)
我们的模型类应该从nn.Module继承,它是所有神经网络模块的基类
import torch
class LinearModel(torch.nn.Module):
#__init__,forward这两个函数必须实现
def __init__(self): # 构造函数:初始化对象默认调用的函数
super(LinearModel, self).__init__()
self.linear = torch.nn.Linear(1, 1) # 构造对象,输入特征数为1,输出特征数为1
def forward(self, x):
#nn.Linear类实现了__call__(),使得该类实例可以像函数一样调用
#通常情况下forward()将被调用
y_pred = self.linear(x) #在对象后面加(),实现可调用对象
return y_pred
# 实例化对象
model = LinearModel()
其中,
self.linear = torch.nn.Linear(1, 1)
torch.nn.Linear是pytorch中的一个类,类的后面加括号,构造了一个对象,Linear这个对象它包含了权重和偏置这两个tensor,可以直接用Linear实现 xw + b ,Linear 也是继承至Module,能够自动进行反向传播。self.linear,self里的 linear 它是一个对象,对象的类型是torch下nn(Neural Network)这个模块中的Linear 这个类。
3.构造损失函数和优化器
# 定义MSE(均方差)损失函数,size_average=False不求均值
criterion = torch.nn.MSELoss(size_average=False)
# 对整个模型进行优化,优化器不会构建计算图。
#optim优化模块的SGD,第一个参数是取得模型中的全部参数
#parameters()会检测moduel中的所有成员,如果成员里有相应的权重,
#它就把这些都加到你最后要进行的训练的结果上) 学习率为0.01
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
4.训练周期(前馈、反馈、更新)
for epoch in range(100):
y_pred = model(x_data) #计算 y_pred
loss = criterion(y_pred, y_data) #计算损失
print(epoch, loss.item())
optimizer.zero_grad() #所有权重每次都梯度清零
loss.backward() # 反向传播求梯度
optimizer.step() #更新,step()更新函数,它会根据所有参数里面它所包含的梯度以及我们预先设置的学习率来进行自动更新
完整代码:
import torch
# Prepare dataset
x_data = torch.Tensor([[1.0],[2.0],[3.0]])
y_data = torch.Tensor([[2.0],[4.0],[6.0]])
# Design Model
class LinearModel(torch.nn.Module):
def __init__(self):#构造函数
super(LinearModel,self).__init__()
self.linear = torch.nn.Linear(1,1)
def forward(self, x):
y_pred = self.linear(x)
return y_pred
model = LinearModel()
# Construct Loss & Optimizer
criterion = torch.nn.MSELoss()
optimizer = torch.optim.SGD(model.parameters(),lr=0.01)
# Training Cycle
for epoch in range(1000):
y_pred = model(x_data)
loss = criterion(y_pred,y_data)
print(epoch,loss.item())
optimizer.zero_grad()
loss.backward()
optimizer.step()
# Test Model
print('w = ',model.linear.weight.item()) # w是一个矩阵, .item把矩阵的数值取出来
print('b = ',model.linear.bias.item()) # b是一个矩阵, .item把矩阵的数值取出来
x_test = torch.Tensor([[4.0]])
y_test = model(x_test)
print('y_pred = ', y_test.data)

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。
更多推荐
所有评论(0)