基于pytorch实现线性回归

在pytorch中我们使用Tensor作为基本的储存单元

整个流程如下

一、准备好数据集
二、设计模型
三、构造损失函数和优化器
四、写相应的训练循环

import torch
import torch.nn

class LinearModel(torch.nn.Module):#module会帮助自动完成反馈的计算
	def __init__(self):
		super(LinearModel,self).__init__()#super调用父类的self
		self.linear=torch.nn.Linear(1,1)#(1,1)表示x和y都只有一个维度
	def forward(self,x)  :#进行前馈的计算
		y_pred=self.linear(x)#实现了可调用的对象
		return y_pred
model=LinearModel()

torch.nn.linear(in_features,out_features,bias=True)
进行y=Ax+b的操作

in_features:输入的样本的size
out_features:输出样本的size
bias为布尔类型的参数——决定你是否要有偏移量
此时的 w、y和x都是tensor

每行代表一个样本,每列代表每个样本的特征

构造损失函数和优化器

criterion=torch.nn.MSELoss(reduction='sum')#pytorch自带的损失函数计算器
#优化器
optimizer=torch.optim.SGD(model.parameters(),lr=0.01)#lr为学习率
#当然还有其他的优化器,看大家的选择

model里面没有定义相应的权重,只有一个linear成员。linear成员有两个权重
parameters会检查model里面的所有成员,若成员里面有相应的权重,则全部加到训练的参数结果上

最后来看看训练过程

for epoch in range(100):
	y_pred=model(x_data)
	loss=criterion(y_pred,y_data)
	print(epoch,loss.item())
	optimizer.zero_grad() #梯度归零
	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)

完整代码如下

import torch
import torch.nn

x_data=torch.Tensor([[1.0],[2.0],[3.0]])
y_data=torch.Tensor([[2.0],[4.0],[6.0]])


class LinearModel(torch.nn.Module):#module会帮助自动完成反馈的计算
    def __init__(self):
        super(LinearModel,self).__init__()#super调用父类的self
        self.linear=torch.nn.Linear(1,1)#(1,1)表示x和y都只有一个维度
    def forward(self,x)  :#进行前馈的计算
        y_pred=self.linear(x)#实现了可调用的对象
        return y_pred
model=LinearModel()

criterion=torch.nn.MSELoss(reduction='sum')#pytorch自带的损失函数计算器

#优化器
optimizer=torch.optim.SGD(model.parameters(),lr=0.01)#lr为学习率
#当然还有其他的优化器,看大家的选择


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()#自动更新
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)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值