PyTorch实现线性回归--LinearRegression

用Pytorch已经好久了,但是毕业后这有半年多没搞过,复习一下!

分析一下

线性回归比较简单,例如: y = kx + b
有两个特点:

  • 1 是一阶的
  • 2 不需要非线性映射

因此可以判断线性回归的输入数据是一维的、线性回归不需要激活函数
那么我们基本可以如下定义一个神经网络了:

class LinearRegressionModel(nn.Module):               # 必须继承nn.Module
    def __init__(self, input_dim, output_dim):        # 参数: 输入维度、输出维度
        super(LinearRegressionModel, self).__init__() # 固定写法
        self.linear = Linear(input_dim, output_dim)   # 一个线性层,给定输入输出维度
    
    def forward(self, x):		# 前向传播
        out = self.linear(x)	# 
        return out

多简单,给出完整的代码:

import torch
import torch.nn as nn

import numpy as np
from torch.nn import Linear, # Sequential, ReLU
class LinearRegressionModel(nn.Module):
    def __init__(self, input_dim, output_dim):
        super(LinearRegressionModel, self).__init__()
        self.linear = Linear(input_dim, output_dim)
    
    def forward(self, x):
        out = self.linear(x)
        return out

#####################然后是定义数据
x_values = [i for i in range(11)]
x_train = np.array(x_values, dtype = np.float32)
x_train = x_train.reshape(-1, 1)
y_value = [2*i +1 for i in x_values]
x_train = np.array(y_values, dtype = np.float32)
y_train = y_train.reshape(-1, 1)

##################下面是网络的一些东西,输入输出维度
input_dim = 1
output_dim = 1
model = LinearRegressionModel(input_dim, output_dim)

################## 循环多少次,学习率,优化器是什么,损失函数是什么
epochs = 1000
learning_rate = 0.01
optimizer = torch.optim.SGD(model.parameters(), lr = learning_rate)
criterion = nn.MSELoss()

################### 下面是训练的过程
inputs = torch.from_numpy(x_train)	# 首先把数据弄成Tensor类型的
labels = torch.from_numpy(y_train)
for epoch in range(epochs):
    optimizer.zero_grad() 				# 优化器的梯度归零,固定写法
    outputs = model(inputs)				# 模型输入inputs,然后输出outputs
    loss = criterion(outputs, labels)   # 计算一下loss,outputs、labels在前在后貌似有点区别,感兴趣的去查查?以前我用kares记得是有区别的
    loss.backward()						# 梯度回传,固定写法
    optimizer.step()					# 下一步,  固定写法
    if epoch % 500 == 0:				# 没什么意思了
        print('epoch {}, loss {}'.format(epoch, loss.item()) )

#################测试一下
x_2 = torch.from_numpy(np.array(3, dtype=np.float32).reshape(-1, 1))
print(model(x_2).data.numpy()) # 输出了7,证明没问题

################### 保存模型参数,也是相当简单
torch.save(model.state_dict(), 'models/1_linear.pkl')


#这里是设置GPU,不写了,相信问题不大
#gpu1 = torch.device("cuda:0")
#gpu1 = torch.device("cuda:1")
#希望简单的可以参考下面的写法
'''
model.cuda()
inputs.cuda()
labels.cuda()
'''

下面是输出结果:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值