首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >[深度学习][pytorch]pytorch实现一个简单得线性回归模型并训练

[深度学习][pytorch]pytorch实现一个简单得线性回归模型并训练

作者头像
云未归来
发布2025-07-19 12:53:15
发布2025-07-19 12:53:15
1640
举报

一个典型的神经网络的训练过程如下:

定义具有学习参数(或权重)的神经网络 迭代输入数据集 根据神经网络对输入数据集进行运算 计算损失(输出与真实结果的距离,损失越小说明模型越准确) 将梯度反向传播给神经网络的参数 更新网络的权重(或参数)。通常使用一种简单的更新规则:权重 = 权重 - 学习率 * 梯度 线性回归模型目标:

构造一组输入数据 x 和其对应的标签 y ,让模型学习拟合出 w 和 b。 我们这里要模拟出的线性回归函数:y = 2x + 1 x 给的是从 0 - 10 一共11个数(11行1列的矩阵)     对应的y就是 1 - 21 也是11个数(11行1列的矩阵)

import numpy as np import torch import torch.nn as nn 构造X训练数据 x_values = [i for i in range(11)] x_train = np.array(x_values,dtype=np.float32) x_train = x_train.reshape(-1,1) x_train.shape

(11,1) 构造y训练数据 y_values = [2*i+1 for i in x_values] y_train = np.array(y_values,dtype=np.float32) y_train = y_train.reshape(-1,1) y_train.shape

(11,1) 建立网络模型:1.实现init()用到了哪个层 2.前向传播forward()怎么实现的 线性回归模型:一个不加激活函数的全连接层 class LinearRegressionModel(nn.Module):     def __init__(self, input_dim, output_dim):         super(LinearRegressionModel, self).__init__()         self.linear = nn.Linear(input_dim, output_dim) #全连接层 给定输入/出数据的维度 

    def forward(self, x):         out = self.linear(x)#走全连接层 输入x,得到输出out         return out

input_dim = 1 output_dim = 1 model = LinearRegressionModel(input_dim,output_dim) 指定参数和损失函数 epochs = 1000 #迭代1000次 learning_rate = 0.01 #学习率 optimizer = torch.optim.SGD(model.parameters(),lr=learning_rate) #优化器 模型的参数 学习率 criterion = nn.MSELoss() #损失函数  训练模型 for epoch in range(epochs):     epoch += 1     #x,y数据转换成tensor格式     inputs = torch.from_numpy(x_train)     labels = torch.from_numpy(y_train)     #梯度要清零 不然会对上一次迭代的结果进行累加     optimizer.zero_grad()     #前向传播     outputs = model(inputs)     #计算损失     loss = criterion(outputs,labels)     #反向传播     loss.backward()     #更新权重参数     optimizer.step()     if epoch%50 ==0:         print('epoch {}, loss {}'.format(epoch, loss.item()))

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

模型的保存与读取 torch.save(model.state_dict(),'linear_regression_model.pkl')

model.load_state_dict(torch.load('linear_regression_model.pkl')) <All keys matched successfully>

数据和模型传入cuda——用GPU训练

class LinearRegressionModel(nn.Module):     def __init__(self, input_dim, output_dim):         super(LinearRegressionModel, self).__init__()         self.linear = nn.Linear(input_dim, output_dim)       def forward(self, x):         out = self.linear(x)         return out

input_dim = 1 output_dim = 1

model = LinearRegressionModel(input_dim, output_dim)

#设置cuda device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") #模型传入cuda model.to(device)

criterion = nn.MSELoss()

learning_rate = 0.01

optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate)

epochs = 1000 for epoch in range(epochs):     epoch += 1     #inputs和labels的数据 传入cuda     inputs = torch.from_numpy(x_train).to(device)     labels = torch.from_numpy(y_train).to(device)

    optimizer.zero_grad() 

    outputs = model(inputs)

    loss = criterion(outputs, labels)

    loss.backward()

    optimizer.step()

    if epoch % 50 == 0:         print('epoch {}, loss {}'.format(epoch, loss.item()))

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-10-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档