Pytorch构建神经网络多元线性回归模型

devtools/2024/9/23 5:14:10/

1.模型线性方程y = W ∗ X + b 

python">from torch import nn
import torch#手动设置的W参数(待模型学习),这里设置为12个,自己随意设置weight_set=torch.tensor([[1.5,2.38,4.22,6.5,7.2,3.21,4.44,6.55,2.48,-1.75,-3.26,4.78]])#手动设置的偏置b
bias=torch.tensor([7.25])#生成100个随机的12个特征的点
torch.random.manual_seed(100)
x=torch.randint(1,10,(100,12))
x=x.float()
#将参数转置
weight_set_trans=weight_set.transpose(0,1)
#y=w*x+b
y_true=torch.matmul(x,weight_set_trans)+bias

2.定义单层的网络结构

python">#定义模型class linear_model(nn.Module):def __init__(self):super().__init__()self.layer = nn.Linear(12,1)def forward (self, x):y = self.layer(x)return y
model=linear_model()
h=model(x)
for name ,param in model.named_parameters():print(f"{name}:{param}")output:layer.weight:Parameter containing:
tensor([[ 0.2429,  0.0523, -0.2873,  0.2485,  0.1396, -0.0960,  0.2534,  0.2423,0.0123, -0.2309, -0.2212,  0.0499]], requires_grad=True)
layer.bias:Parameter containing:
tensor([0.0503], requires_grad=True)

可以看到模型初始化的参数与设置的参数相差很大

3.模型训练

python">#定义优化器
optimizer=torch.optim.Adam(model.parameters(),lr=0.1)
#定义损失函数
criterion=nn.MSELoss()
#设置训练轮数
for epoch in range(5000):h=model(x)loss=criterion(h,y_true)#使用backward计算梯度loss.backward()#参数更新optimizer.step()optimizer.zero_grad() #梯度清零if epoch %100==0:print(f'after{epoch+1} iterations,train_loss:{loss.item():.3f}')
output:
after1 iterations,train_loss:36681.406
after101 iterations,train_loss:488.356
after201 iterations,train_loss:297.450
after301 iterations,train_loss:158.137
after401 iterations,train_loss:75.587
after501 iterations,train_loss:33.060
after601 iterations,train_loss:13.407
after701 iterations,train_loss:5.149
after801 iterations,train_loss:1.968
after901 iterations,train_loss:0.831
after1001 iterations,train_loss:0.445
after1101 iterations,train_loss:0.315
after1201 iterations,train_loss:0.268
after1301 iterations,train_loss:0.248
after1401 iterations,train_loss:0.236
after1501 iterations,train_loss:0.226
after1601 iterations,train_loss:0.218
after1701 iterations,train_loss:0.209
after1801 iterations,train_loss:0.200
after1901 iterations,train_loss:0.191print(model.state_dict())output:OrderedDict({'layer.weight': tensor([[ 1.5698,  2.4342,  4.2689,  6.5287,  7.2732,  3.2440,  4.4685,  6.6003,2.5380, -1.7194, -3.2042,  4.8492]]), 'layer.bias': tensor([4.2708])})#保存模型文件参数
torch.save(model.state_dict(),'lr.pth')#模型预测model_predict=linear_model()
#加载模型参数
model_predict.load_state_dict(torch.load('lr.pth'))predict=model.predict(x)

 可以看到经过1000次迭代之后,损失就很小了。最终模型训练的参数与开始设置的参数也比较接近。


http://www.ppmy.cn/devtools/115159.html

相关文章

pthread_cond_signal 和pthread_cond_wait

0、pthread_join()函数作用: pthread_join() 函数会一直阻塞调用它的线程,直至目标线程执行结束(接收到目标线程的返回值),阻塞状态才会解除。如果 pthread_join() 函数成功等到了目标线程执行结束(成功获取…

第J3-1周:DenseNet算法 实现乳腺癌识别(pytorch)

>- **🍨 本文为[🔗365天深度学习训练营]中的学习记录博客** >- **🍖 原作者:[K同学啊]** 🏡 我的环境: 语言环境:Python3.8 编译器:Jupyter Notebook 深度学习环境&#x…

如何创建模板提示prompt

定义模型 from langchain_ollama import ChatOllamallm ChatOllama(base_url"http://ip:11434",model"qwen2",temperature0,tool_choice"auto" )什么是提示模板? 它的目的是根据不同的输入动态生成特定格式的文本,以便…

Vue 项目中引入 Axios 详解

Vue 项目中引入 Axios 详解 在 Vue 项目中,axios 是一个非常流行的 HTTP 客户端,用于向服务器发送请求并处理响应。本文将详细说明如何在 Vue 项目中引入 Axios 插件,以及如何进行基本的配置,包括构建、配置域名、设置全局错误拦…

经典sql题(七)查找直播间最大在线人数

使用 SQL 分析房间用户状态变化 本文将详细介绍如何使用 SQL 的窗口函数和聚合函数,分析用户在房间中的状态变化,目标是计算每个房间指定时间段内的最大用户状态。 示例数据 假设我们的数据表包含以下字段: room_iduser_idlogin_timelogo…

禁忌搜索算法(TS算法)求解实例---旅行商问题 (TSP)

目录 一、采用TS求解 TSP二、 旅行商问题2.1 实际例子:求解 6 个城市的 TSP2.2 **求解该问题的代码,代码(完整代码关注底部微信公众号获取)**2.3 代码运行过程截屏2.4 代码运行结果截屏(后续和其他算法进行对比&#x…

ARM/Linux嵌入式面经(三八):绿盟科技

文章目录 @[toc]堆和栈是怎么实现的?基本概念实现方式栈的实现堆的实现面试官的追问堆和栈的运用是怎样运用的、怎样存储的?回答栈(Stack)堆(Heap)深度对比面试官可能的追问Linux系统中进程与进程之间的通信方式有哪些?1. 管道(Pipe)2. 共享内存(Shared Memory)3. 消…

网络安全-ssrf

目录 一、环境 二、漏洞讲解 三、靶场讲解 四、可利用协议 4.1 dict协议 4.2 file协议 4.3 gopher协议 五、看一道ctf题吧(长亭的比赛) 5.1环境 5.2开始测试 ​编辑 一、环境 pikachu,这里我直接docker拉取的,我只写原…