2 线性回归demo数据-参数配置|训练回归模型|常见的tensor格式|Hub模块简介|气温数据集与任务介绍

线性回归demo数据-参数配置

# 先传入数据,可以是手动定义,也可以导入,这边就直接拿一条直线y=2x+1,来进行模拟了。
# 构造x和y(x的值为0-10)(y的值为2x+1)
x_value = [i for i in range(11)]
y_value = [2*i+1 for i in x_value]
# 由于都是列表(数组),也就是需要转化为torch可以接受的模式
# np.array是将一个数组转化为张量.
# reshape即将张量的格式进行修改
x_train = np.array(x_value,dtype=np.float32)
y_train = np.array(y_value,dtype=np.float32)
x_train = x_train.reshape(-1,1)
y_train = y_train.reshape(-1,1)
# 导入包
import torch
import torch.nn as nn
# 线性回归模型
class LinearRegressionModel(nn.Module) :
    def __init__(self,input_dim,out_dim):
        super(LinearRegressionModel,self).__init__()
        # 这里是构造一个全连接层
        self.linear = nn.Linear(input_dim,out_dim)
    # 创建x与y的构建,即此处判定了输出入x即得到y的一条线性链
    def forward(self,x):
        y = self.linear(x)
        return y

input_dim = 1
out_dim = 1
model = LinearRegressionModel(input_dim,out_dim)
# 指定好参数以及损失函数
# epochs训练次数 learning_rate学习率
# SGD是一个优化器,前一个参数代表着需要优化的参数,后一个是学习率,具体一点他是一个随机梯度优化器
# MSELoss是一个损失函数,目的是用来计算出L的
epochs = 1000
learning_rate = 0.01
optimizer = torch.optim.SGD(model.parameters(),lr=learning_rate)
criterion = nn.MSELoss()

关于linear的理解:链接
关于SGD的理解:链接
关于MSELoss损失函数的理解:链接

线性回归demo数据-训练回归模型

# 指定好参数以及损失函数
# epochs训练次数 learning_rate学习率
# SGD是一个优化器,前一个参数代表着需要优化的参数,后一个是学习率,具体一点他是一个随机梯度优化器
# MSELoss是一个损失函数,目的是用来计算出L的
epochs = 1000
learning_rate = 0.01
optimizer = torch.optim.SGD(model.parameters(),lr=learning_rate)
criterion = nn.MSELoss()
# 训练回归模型
for epho in range(epochs):
    epho+=1
    # 转化为tensor
    inputs = torch.from_numpy(x_train)
    labels = torch.from_numpy(y_train)
    # 梯度每一步都需要清零
    optimizer.zero_grad()
    # 前向传播
    outputs = model.forward(inputs)
    # 计算损失值
    loss = criterion(outputs,labels)
    # 反向传播
    loss.backward()
    # 更新权重参数
    optimizer.step()

测试数据:

# 测试模型预测的结果
predicted = model(torch.from_numpy(x_train).requires_grad_()).data.numpy()
print(predicted)

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

# 模型的保存以及提取
torch.save(model.state_dict(),'model.pkl')
model.load_state_dict(torch.load('model.pkl'))

总结以及关于GPU的训练:(仅有两处不同)

# 线性回归
# 先传入数据,可以是手动定义,也可以导入,这边就直接拿一条直线y=2x+1,来进行模拟了。
# 构造x和y(x的值为0-10)(y的值为2x+1)
x_value = [i for i in range(11)]
y_value = [2*i+1 for i in x_value]
# 由于都是列表(数组),也就是需要转化为torch可以接受的模式
# np.array是将一个数组转化为张量.
# reshape即将张量的格式进行修改
x_train = np.array(x_value,dtype=np.float32)
y_train = np.array(y_value,dtype=np.float32)
x_train = x_train.reshape(-1,1)
y_train = y_train.reshape(-1,1)
# 导入包
import torch
import torch.nn as nn
# 线性回归模型
class LinearRegressionModel(nn.Module) :
    def __init__(self,input_dim,out_dim):
        super(LinearRegressionModel,self).__init__()
        # 这里是构造一个全连接层
        self.linear = nn.Linear(input_dim,out_dim)
    # 创建x与y的构建,即此处判定了输出入x即得到y的一条线性链
    def forward(self,x):
        y = self.linear(x)
        return y

input_dim = 1
out_dim = 1
model = LinearRegressionModel(input_dim,out_dim)
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~不同处1~~~~~~~~~~~~~~~~~~~~~~~~~~~
device = torch.device("cuda:0"if torch.cuda.is_available() else "cpu")
model.to(device)
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

# 指定好参数以及损失函数
# epochs训练次数 learning_rate学习率
# SGD是一个优化器,前一个参数代表着需要优化的参数,后一个是学习率,具体一点他是一个随机梯度优化器
# MSELoss是一个损失函数,目的是用来计算出L的
epochs = 1000
learning_rate = 0.01
optimizer = torch.optim.SGD(model.parameters(),lr=learning_rate)
criterion = nn.MSELoss()
# 训练回归模型
for epho in range(epochs):
    epho+=1
    
    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~不同点2~~~~~~~~~~~~~~~~~~~
    # 转化为tensor
    inputs = torch.from_numpy(x_train).to(device)
    labels = torch.from_numpy(y_train).to(device)
    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    # 梯度每一步都需要清零
    optimizer.zero_grad()
    # 前向传播
    outputs = model.forward(inputs)
    # 计算损失值
    loss = criterion(outputs,labels)
    # 反向传播
    loss.backward()
    # 更新权重参数
    optimizer.step()
    # if epho%100==0 :
    #     print(loss.item())
# 测试模型预测的结果
predicted = model(torch.from_numpy(x_train).requires_grad_()).data.numpy()
print(predicted)
# 模型的保存以及提取
torch.save(model.state_dict(),'model.pkl')
model.load_state_dict(torch.load('model.pkl'))

常见的tensor格式

常见的tensor格式主要有下面四种:

  1. scalar
  2. vector
  3. matrix
  4. n-dimensional tensor

scalar

代表着一个值:

x = tensor(42)
print(x)
print(x.dim())# 维度
print(x.item())

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

vector

x = tensor([1,2,3])
print(x)
print(x.dim())
print(x.size())

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

matrix

基本上也是一致的,只是维度扩展了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值