首页
视频
资源
登录
原
Pytorch 预测产量(易化学习笔记一)
576
人阅读
2024/6/3 17:23
总访问:
2971660
评论:
0
收藏:
0
手机
分类:
python
![](https://img.tnblog.net/arcimg/hb/21f086c80c5d4afda1bc1029dadd8f3a.png) >#Pytorch 预测产量(易化学习笔记一) [TOC] ## 实验目的(二维) tn2>通过温度进行产量预测。 ![](https://img.tnblog.net/arcimg/hb/4d2917ee088540998f8b2957db120a79.PNG) ## 实验代码 ### 导入数据集 ```python import torch import matplotlib.pyplot as plt ## 1.导入数据集 # 输入样本数据集 inputs = torch.tensor([[10.1, 12., 12.4, 15.,17.1]]) # 目标样本集 targets = torch.tensor([[200., 230., 249., 370., 391.]]) # 创建1*1的随机矩阵,元素是随机选取自一个均值为0 且标准差为1的正态分布 w = torch.randn(1, 1, requires_grad=True) # 创建1*1的随机数 b = torch.randn(1, 1, requires_grad=True) ``` ### 构建模型 ```python ## 2.构建模型 # 定义模型 def model(x): # 线性回归算法 return x * w + b # 定义均方差损失函数 -> 比较预测值与目标值差距 def loss_mse(p,t): diff = p - t return torch.mean(diff * diff) / diff.numel() ``` ### 训练模型 ```python # 学习率 learning_rate = 1e-5 # 训练13000轮 for i in range(13000): # 模型对输入进行预测 preds = model(inputs) # 计算损失函数 loss = loss_mse(preds, targets) # 反向传播 loss.backward() # 更新权重和偏置 with torch.no_grad(): w -= learning_rate * w.grad b -= learning_rate * b.grad # 梯度清零 w.grad.zero_() b.grad.zero_() # 每训练500次打印一次 if i % 500 == 0: print('Epoch %d, Loss: %.3f' % (i, loss.item())) plt.plot(inputs.numpy(),targets.numpy(),'go',label='样本点集') # 显示预测结果 plt.plot(inputs.numpy()[0],preds.detach().numpy()[0],'r-',lw=3) #plt.show() ``` ![](https://img.tnblog.net/arcimg/hb/80f53711870d4670874d171e81f54258.PNG) tn2>可以发现它的损失越来越低,预测的正确率越来越高。 ### 预测 ```python ## 4.模型评估 # 输入全新的值(温度),预测输出的值(产量) new_inputs = torch.tensor([[11.1]]) print("输入新值的单点:\n",new_inputs) preds = model(new_inputs) print("预测out:\n",preds) # 输入多点的值(温度),预测输出的值(产量) new_inputs = torch.tensor([[11.1,23.5,32.1]]) print("输入新值的多点:\n",new_inputs) preds = model(new_inputs) print("预测out:\n",preds) ``` ![](https://img.tnblog.net/arcimg/hb/b77dd6f67fcd43e694e0d0e26f430f48.png) ## 实验目的(三维) ![](https://img.tnblog.net/arcimg/hb/c4321109c91f448191fd2f7acc9e60a2.png) ![](https://img.tnblog.net/arcimg/hb/a02cc2e2fc3c47de81078a42555421a0.png) tn2>通过温度、降雨量和光照进行预测苹果和桔子的产量。 ```python import torch import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D # 设置中文字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置默认字体为黑体 plt.rcParams['axes.unicode_minus'] = False # 正常显示负号 ## 1.导入数据集 # 输入样本数据集 inputs = torch.tensor([ [10.1, 12., 12.4, 15.,17.1], [100., 120., 130., 150., 160.], [36., 39., 42., 54., 69.] ]) # 目标样本集 targets = torch.tensor([ [200., 230., 249., 370., 391.], [410., 470., 520., 711., 823.] ]) # 创建3*2的随机矩阵,元素是随机选取自一个均值为0 且标准差为1的正态分布 w = torch.randn(2, 3, requires_grad=True) # 创建1*1的随机数 b = torch.randn(2, 1, requires_grad=True) ## 2.构建模型 # 定义模型 def model(x): # 线性回归算法 return torch.matmul(w, x) + b # 定义均方差损失函数 -> 比较预测值与目标值差距 def loss_mse(p,t): diff = p - t return torch.mean(diff * diff) / diff.numel() ## 3.训练模型 # 学习率 learning_rate = 1e-5 # 训练3000轮 for i in range(13000): # 模型对输入进行预测 preds = model(inputs) # 计算损失函数 loss = loss_mse(preds, targets) # 反向传播 loss.backward() # 更新权重和偏置 with torch.no_grad(): w -= learning_rate * w.grad b -= learning_rate * b.grad # 梯度清零 w.grad.zero_() b.grad.zero_() # 每训练500次打印一次 if i % 500 == 0: print('Epoch %d, Loss: %.3f' % (i, loss.item())) # 绘图 fig = plt.figure(figsize=(12, 6)) for j in range(targets.shape[0]): ax = fig.add_subplot(1, 2, j+1, projection='3d') ax.scatter(inputs[0].numpy(), inputs[1].numpy(), targets[j].numpy(), c='g', marker='o', label='样本点集') ax.plot(inputs[0].numpy(), inputs[1].numpy(), preds[j].detach().numpy(), 'r-', lw=3) ax.set_xlabel('温度') ax.set_ylabel('降雨量') ax.set_zlabel('产量' if j == 0 else '目标') ax.set_title(f'{"苹果" if j == 0 else "桔子"} 产量预测') # 添加标注 for k in range(inputs.shape[1]): ax.text(inputs[0, k].item(), inputs[1, k].item(), targets[j, k].item(), f'({inputs[0, k].item()}, {inputs[1, k].item()}, {targets[j, k].item()})', fontsize=9) ax.legend() plt.show() ``` ![](https://img.tnblog.net/arcimg/hb/32e8c6a718c64d7c9e02fc93c2650b56.png) ### 简化 ```python import torch import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D # 设置中文字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置默认字体为黑体 plt.rcParams['axes.unicode_minus'] = False # 正常显示负号 ## 1.导入数据集 # 输入样本数据集 inputs = torch.tensor([ [10.1, 12., 12.4, 15.,17.1], [100., 120., 130., 150., 160.], [36., 39., 42., 54., 69.] ]).T # 目标样本集 targets = torch.tensor([ [200., 230., 249., 370., 391.], [410., 470., 520., 711., 823.] ]).T from torch import nn # 设置内置的线性回归 model = nn.Linear(3,2) # 内置均值损失函数 loss_mse = nn.MSELoss() # 设置优化器 随机梯度下降,学习速率为10^-5 optimizer = torch.optim.SGD(model.parameters(),lr = 1e-5) ## 训练评估 # 训练3000论 num_epochs = 3000 for i in range(num_epochs): # 向前传播 preds = model(inputs) # 计算损失函数 loss = loss_mse(preds, targets) # 梯度清零 optimizer.zero_grad() # 反向传播 loss.backward() # 按照学习率减去少量梯度来调整权重 optimizer.step() # 每训练500次打印一次 if i % 500 == 0: print('Epoch [{}/{}], Loss: {:.4f}'.format(i + 1,num_epochs, loss.item())) print('targets is :\n',targets.T) print('preds after train: \n',preds.T) ``` ![](https://img.tnblog.net/arcimg/hb/7de77e3c504d47168b2b2a30946f5062.png) ```python # 单点预测 new_inputs = torch.tensor([[11.1],[98.],[35.]]).T print("输入新值(单点):\n",new_inputs.T) preds = model(new_inputs) print("预测out:\n",preds.T) # 多点预测 new_inputs = torch.tensor([[11.1,16.2],[98.,102.3],[35.,40.2]]).T print("输入新值(多点):\n",new_inputs.T) preds = model(new_inputs) print("预测out:\n",preds.T) ``` ![](https://img.tnblog.net/arcimg/hb/a322b0157cb340e2ada2f474fcc38bdc.png)
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739
👈{{preArticle.title}}
👉{{nextArticle.title}}
评价
{{titleitem}}
{{titleitem}}
{{item.content}}
{{titleitem}}
{{titleitem}}
{{item.content}}
尘叶心繁
这一世以无限游戏为使命!
博主信息
排名
6
文章
6
粉丝
16
评论
8
文章类别
.net后台框架
177篇
linux
18篇
linux中cve
1篇
windows中cve
0篇
资源分享
10篇
Win32
3篇
前端
28篇
传说中的c
5篇
Xamarin
9篇
docker
15篇
容器编排
101篇
grpc
4篇
Go
15篇
yaml模板
1篇
理论
2篇
更多
Sqlserver
4篇
云产品
39篇
git
3篇
Unity
1篇
考证
2篇
RabbitMq
23篇
Harbor
1篇
Ansible
8篇
Jenkins
17篇
Vue
1篇
Ids4
18篇
istio
1篇
架构
2篇
网络
7篇
windbg
4篇
AI
19篇
threejs
2篇
人物
1篇
嵌入式
20篇
python
20篇
HuggingFace
8篇
pytorch
10篇
opencv
6篇
Halcon
5篇
最新文章
最新评价
{{item.articleTitle}}
{{item.blogName}}
:
{{item.content}}
关于我们
ICP备案 :
渝ICP备18016597号-1
网站信息:
2018-2024
TNBLOG.NET
技术交流:
群号656732739
联系我们:
contact@tnblog.net
欢迎加群
欢迎加群交流技术