B站--刘二大人《PyTorch深度学习实践》完结合集 05.用pytorch实现线性回归
链接:网盘 提取码:cxe4
目录
3.construct loss and optimizer
1.prepare dataset
用mini-batch构建数据集,x,y必须是矩阵
x_data = torch.tensor([[1.0], [2.0], [3.0]])
y_data = torch.tensor([[2.0], [4.0], [6.0]])
2.design model using class
计算 y^
构建module 重点在于构建计算图
- 如果loss后是个向量,没办法进行backward
class LinearModel(torch.nn.Module): #定义模型(基本模板)
#继承module
def __init__(self): #构造函数
super(LinearModel, self).__init__() # 调用父类的构造(类名,self)
self.linear = torch.nn.Linear(1, 1) # torch.nn.Linear pytorch中的一个类
# torch.nn.Linear(1, 1) 类()-》构建对象(权重,偏置)
# torch.nn.Linear(in_features,out_feasures,bias=true)
def forward(self, x): #定义前向传播
y_pred = self.linear(x) # linear(x)可调用对象 linear(x), __call__函数
return y_pred
model = LinearModel() # model也是一个可调用对象
#module中一定有-init-,forward模块
#module自动实现反向传播过程
#可以用module实现已经存在的函数
#可以用functions构建自己的计算函数,但是需要设计反向传播函数
3.congoujianstruct loss and optimizer
构建损失函数
只要构建计算图,就是继承自module
将矩阵中的数值相加,最后形成一个数值,即为loss
criterion=torch.nn.MSELoss(size_average=False)
#需要的参数(y`^,y)
# MSELoss类继承自Module,可以通过torch.nn.MSELoss进行调用,pytorch提供的MSE损失函数。
optimizer=torch.optim.SGD(model.parameters(),lr=0.01)
# 优化器,不会构建计算图
#parameters 继承自model 告诉优化器哪些参数需要进行随机梯度下降
4.training cycle
for epoch in range(100):
y_pred=model(x_data) #x_data传进y_pred
loss=criterion(y_pred,y_data)
print(epoch, loss)
optmizer.zero_grad() #梯度归零,计算backward(梯度)
loss.backward()
optimizer.step() #梯度更新
# 打印出最终的权重和偏置值
#output weight and bias
print('w = ', model.linear.weight.item()) #,,,item(),不加item(),打印的将会是矩阵
print('b = ', model.linear.bias.item())
#测试模型
#test model
x_test = torch.tensor([4.0])
y_test = model(x_test)
print('y_pred = ', y_test.data)
5.本节整体代码
import torch
#1.准备数据
x_data = torch.tensor([[1.0], [2.0], [3.0]])
y_data = torch.tensor([[2.0], [4.0], [6.0]])
#2.设计模型
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()
#3.设计loss和优化器
criterion = torch.nn.MSELoss(size_average=False)
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
# 4.训练
for epoch in range(100):
y_pred = model(x_data)
loss = criterion(y_pred, y_data)
print(epoch, loss.item())
optimizer.zero_grad()
print(loss)
loss.backward()
optimizer.step()
print('w = ', model.linear.weight.item())
print('b = ', model.linear.bias.item())
x_test = torch.tensor([4.0])
y_test = model(x_test)
print('y_pred = ', y_test.data)
课后作业
换一下优化器
参考链接:pytorch 深度学习实践 第5讲 pytorch实现线性回归_self.linear_会游泳的小雁的博客-CSDN博客