tnblog
首页
视频
资源
登录

Pytorch 预测产量(易化学习笔记一)

1876人阅读 2024/6/3 17:23 总访问:3667664 评论:0 收藏:0 手机
分类: python

Pytorch 预测产量(易化学习笔记一)

实验目的(二维)


通过温度进行产量预测。

实验代码

导入数据集

  1. import torch
  2. import matplotlib.pyplot as plt
  3. ## 1.导入数据集
  4. # 输入样本数据集
  5. inputs = torch.tensor([[10.1, 12., 12.4, 15.,17.1]])
  6. # 目标样本集
  7. targets = torch.tensor([[200., 230., 249., 370., 391.]])
  8. # 创建1*1的随机矩阵,元素是随机选取自一个均值为0 且标准差为1的正态分布
  9. w = torch.randn(1, 1, requires_grad=True)
  10. # 创建1*1的随机数
  11. b = torch.randn(1, 1, requires_grad=True)

构建模型

  1. ## 2.构建模型
  2. # 定义模型
  3. def model(x):
  4. # 线性回归算法
  5. return x * w + b
  6. # 定义均方差损失函数 -> 比较预测值与目标值差距
  7. def loss_mse(p,t):
  8. diff = p - t
  9. return torch.mean(diff * diff) / diff.numel()

训练模型

  1. # 学习率
  2. learning_rate = 1e-5
  3. # 训练13000轮
  4. for i in range(13000):
  5. # 模型对输入进行预测
  6. preds = model(inputs)
  7. # 计算损失函数
  8. loss = loss_mse(preds, targets)
  9. # 反向传播
  10. loss.backward()
  11. # 更新权重和偏置
  12. with torch.no_grad():
  13. w -= learning_rate * w.grad
  14. b -= learning_rate * b.grad
  15. # 梯度清零
  16. w.grad.zero_()
  17. b.grad.zero_()
  18. # 每训练500次打印一次
  19. if i % 500 == 0:
  20. print('Epoch %d, Loss: %.3f' % (i, loss.item()))
  21. plt.plot(inputs.numpy(),targets.numpy(),'go',label='样本点集')
  22. # 显示预测结果
  23. plt.plot(inputs.numpy()[0],preds.detach().numpy()[0],'r-',lw=3)
  24. #plt.show()


可以发现它的损失越来越低,预测的正确率越来越高。

预测

  1. ## 4.模型评估
  2. # 输入全新的值(温度),预测输出的值(产量)
  3. new_inputs = torch.tensor([[11.1]])
  4. print("输入新值的单点:\n",new_inputs)
  5. preds = model(new_inputs)
  6. print("预测out:\n",preds)
  7. # 输入多点的值(温度),预测输出的值(产量)
  8. new_inputs = torch.tensor([[11.1,23.5,32.1]])
  9. print("输入新值的多点:\n",new_inputs)
  10. preds = model(new_inputs)
  11. print("预测out:\n",preds)

实验目的(三维)


通过温度、降雨量和光照进行预测苹果和桔子的产量。

  1. import torch
  2. import matplotlib.pyplot as plt
  3. from mpl_toolkits.mplot3d import Axes3D
  4. # 设置中文字体
  5. plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置默认字体为黑体
  6. plt.rcParams['axes.unicode_minus'] = False # 正常显示负号
  7. ## 1.导入数据集
  8. # 输入样本数据集
  9. inputs = torch.tensor([
  10. [10.1, 12., 12.4, 15.,17.1],
  11. [100., 120., 130., 150., 160.],
  12. [36., 39., 42., 54., 69.]
  13. ])
  14. # 目标样本集
  15. targets = torch.tensor([
  16. [200., 230., 249., 370., 391.],
  17. [410., 470., 520., 711., 823.]
  18. ])
  19. # 创建3*2的随机矩阵,元素是随机选取自一个均值为0 且标准差为1的正态分布
  20. w = torch.randn(2, 3, requires_grad=True)
  21. # 创建1*1的随机数
  22. b = torch.randn(2, 1, requires_grad=True)
  23. ## 2.构建模型
  24. # 定义模型
  25. def model(x):
  26. # 线性回归算法
  27. return torch.matmul(w, x) + b
  28. # 定义均方差损失函数 -> 比较预测值与目标值差距
  29. def loss_mse(p,t):
  30. diff = p - t
  31. return torch.mean(diff * diff) / diff.numel()
  32. ## 3.训练模型
  33. # 学习率
  34. learning_rate = 1e-5
  35. # 训练3000轮
  36. for i in range(13000):
  37. # 模型对输入进行预测
  38. preds = model(inputs)
  39. # 计算损失函数
  40. loss = loss_mse(preds, targets)
  41. # 反向传播
  42. loss.backward()
  43. # 更新权重和偏置
  44. with torch.no_grad():
  45. w -= learning_rate * w.grad
  46. b -= learning_rate * b.grad
  47. # 梯度清零
  48. w.grad.zero_()
  49. b.grad.zero_()
  50. # 每训练500次打印一次
  51. if i % 500 == 0:
  52. print('Epoch %d, Loss: %.3f' % (i, loss.item()))
  53. # 绘图
  54. fig = plt.figure(figsize=(12, 6))
  55. for j in range(targets.shape[0]):
  56. ax = fig.add_subplot(1, 2, j+1, projection='3d')
  57. ax.scatter(inputs[0].numpy(), inputs[1].numpy(), targets[j].numpy(), c='g', marker='o', label='样本点集')
  58. ax.plot(inputs[0].numpy(), inputs[1].numpy(), preds[j].detach().numpy(), 'r-', lw=3)
  59. ax.set_xlabel('温度')
  60. ax.set_ylabel('降雨量')
  61. ax.set_zlabel('产量' if j == 0 else '目标')
  62. ax.set_title(f'{"苹果" if j == 0 else "桔子"} 产量预测')
  63. # 添加标注
  64. for k in range(inputs.shape[1]):
  65. ax.text(inputs[0, k].item(), inputs[1, k].item(), targets[j, k].item(),
  66. f'({inputs[0, k].item()}, {inputs[1, k].item()}, {targets[j, k].item()})',
  67. fontsize=9)
  68. ax.legend()
  69. plt.show()

简化

  1. import torch
  2. import matplotlib.pyplot as plt
  3. from mpl_toolkits.mplot3d import Axes3D
  4. # 设置中文字体
  5. plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置默认字体为黑体
  6. plt.rcParams['axes.unicode_minus'] = False # 正常显示负号
  7. ## 1.导入数据集
  8. # 输入样本数据集
  9. inputs = torch.tensor([
  10. [10.1, 12., 12.4, 15.,17.1],
  11. [100., 120., 130., 150., 160.],
  12. [36., 39., 42., 54., 69.]
  13. ]).T
  14. # 目标样本集
  15. targets = torch.tensor([
  16. [200., 230., 249., 370., 391.],
  17. [410., 470., 520., 711., 823.]
  18. ]).T
  19. from torch import nn
  20. # 设置内置的线性回归
  21. model = nn.Linear(3,2)
  22. # 内置均值损失函数
  23. loss_mse = nn.MSELoss()
  24. # 设置优化器 随机梯度下降,学习速率为10^-5
  25. optimizer = torch.optim.SGD(model.parameters(),lr = 1e-5)
  26. ## 训练评估
  27. # 训练3000论
  28. num_epochs = 3000
  29. for i in range(num_epochs):
  30. # 向前传播
  31. preds = model(inputs)
  32. # 计算损失函数
  33. loss = loss_mse(preds, targets)
  34. # 梯度清零
  35. optimizer.zero_grad()
  36. # 反向传播
  37. loss.backward()
  38. # 按照学习率减去少量梯度来调整权重
  39. optimizer.step()
  40. # 每训练500次打印一次
  41. if i % 500 == 0:
  42. print('Epoch [{}/{}], Loss: {:.4f}'.format(i + 1,num_epochs, loss.item()))
  43. print('targets is :\n',targets.T)
  44. print('preds after train: \n',preds.T)

  1. # 单点预测
  2. new_inputs = torch.tensor([[11.1],[98.],[35.]]).T
  3. print("输入新值(单点):\n",new_inputs.T)
  4. preds = model(new_inputs)
  5. print("预测out:\n",preds.T)
  6. # 多点预测
  7. new_inputs = torch.tensor([[11.1,16.2],[98.,102.3],[35.,40.2]]).T
  8. print("输入新值(多点):\n",new_inputs.T)
  9. preds = model(new_inputs)
  10. print("预测out:\n",preds.T)


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价

Pytorch 初探

Pytorch 初探[TOC] Pytorch简介PyTorch由 Facebook 的 AI 研究团队开发的一个开源的机器学习库,它提供了张量(tensor)计...

Pytorch 自动求导与简单的线性回归

Pytorch 自动求导与简单的线性回归[TOC] 环境安装安装pytorch%pip install torch torchvision torchaudio 自动计算反向...

Pytorch Tensor 常见的形式

Pytorch Tensor 常见的形式[TOC] 值 描述 scalar 0维张量 vector 1维张量 matrix 2维张量 ...

Pytorch 气温预测

Pytorch 气温预测[TOC] 准备数据集下载temps.csv数据集。# 下载包 !wget https://raw.githubusercontent.com/AiDaShi/lea...

Pytorch Mnist分类任务

Pytorch Mnist分类任务[TOC] Mnist分类任务了解目标——网络基本构建与训练方法,常用函数解析——torch.nn.functional...

Pytorch 卷积神经网络效果

Pytorch 卷积神经网络效果[TOC] 数据与在线实践数据链接: https://pan.baidu.com/s/1VkrHDZGukkF900zLncMn5g 密码: 3lom...

Pytorch 基于经典网络架构训练图像分类模型

Pytorch 基于经典网络架构训练图像分类模型[TOC] 数据预处理部分:数据增强:torchvision中transforms模块自带功能,比较...

Pytorch 卷积神经网络效果

Pytorch 卷积神经网络效果[TOC] 数据集Dataloader制作如何自定义数据集:1.数据和标签的目录结构先搞定(得知道到哪读数据)...

Pytorch 新闻分类任务学习笔记

Pytorch 新闻分类任务(学习笔记)[TOC] 目录结构 models文件夹该文件夹显示搭建的网络结构。里面有TextCNN.py和TextRNN....

Pytorch Flask服务部署图片识别学习笔记

Pytorch Flask服务部署图片识别(学习笔记)[TOC] Flask 简介Flask是一个用Python编写的轻量级Web应用框架。它简单易用,...

Pytorch 曲线拟合易化学习笔记二

Pytorch 曲线拟合(易化学习笔记二)[TOC] 感染与天数预测import matplotlib.pyplot as plt import torch import torch....

Pytorch 识别手写数字易化学习笔记三

Pytorch 识别手写数字(易化学习笔记三)[TOC] 识别手写数字LeNet-5手写数字识别的非常高效的卷积神经网络。高效原因:1....

Pytorch cifar10识别普适物体易化学习笔记四

Pytorch cifar10识别普适物体(易化学习笔记四)[TOC] CIFAR-10简介CIFAR-10(Canadian Institute For Advanced Research...

Pytorch loguru日志收集易化学习笔记五

Pytorch loguru日志收集(易化学习笔记五)[TOC] loguru日志简介Loguru 是一个 Python 日志库,旨在简化日志记录的设置和...

Pytorch TensorBoard运用易化学习笔记六

Pytorch TensorBoard运用(易化学习笔记六)[TOC] TensorBoard简介TensorBoard是TensorFlow的可视化工具包,旨在帮助研究...
这一世以无限游戏为使命!
排名
2
文章
657
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术