当前位置: 首页 > ai >正文

Pytorch 的编程技巧

系列文章目录


文章目录

  • 系列文章目录
  • 一、模型的保存与加载
    • Tensor 的相关配置
    • pytorch 与 numpy 相互转化
  • 二、实例:读取一张图片


一、模型的保存与加载

  • torch.saves(state, dir) 保存/序列化(保存图当前的状态)
  • torch.load(dir) 加载模型
    并行化,一般是 CPU 进行数据处理才会用到
  • torch.get_num_threads(): 获得用于并行化的 CPU 操作的OpenMP 线程数。
  • torch.set_num_threads(int) : 设定用于 CPU 并行操作的OpenMP线程数。

OpenMP:跨平台共享内存并行编程的API,旨在通过简单的注释将代码并行化,充分使用多核处理器,无需管理线程。

##Tensor on GPU
  数据计算可以使用 GPU 和 CPU,我们可以使用 to 来进行两者之间的切换。一般我而言,我们经常使用 CPU 进行数据处理,使用 GPU 进行模型训练。
伪代码:

if torch.cuda.is_available():device = torch.device('cuda')  # GPUy = torch.ones_like(x,device=device)x = x.to(device) # 等价于 .to("cuda")z = x+yprint(x)print(z.to("cpu",torch.double)) # to 还可以更改数据类型

Tensor 的相关配置

  • torch.is_tensor() # 是 pytorch 中的Tensor类型,返回 true
  • torch.is_storage() # storage 类型返回 true
  • torch.set_flush_denormal(model) # 防止一些不正常的元素出现
  • torch.set_default_dtype(d) # 对torch.tensor()设置默认的类型
  • torch.printoptions(precision = None, threshold = None,edgeitems = None, linewidth = None,profile = None) # 打印参数的设置

pytorch 与 numpy 相互转化

  • torch.from_numpy(ndarry)
  • a.numpy()
import numpy
import torch
import numpy as npa = numpy.zeros([2,2])
print("a 的内容:",a)
b = torch.from_numpy(a)
print("b 的内容:",b)

  这串代码使用numpy创建了一个张量,然后使用 torch.from_numpy(a) 转化成 torch 中的tensor张量。实际上,numpy 的操作与 torch 很相似,torch 很多功能都是向着 numpy 靠。我们可以使用OpenCV来读取一张图片,然后将它转化成一个张量,进行处理。读取的数据就是 numpy 格式的数据。

二、实例:读取一张图片

import numpy
import torch
import cv2img = cv2.imread("0197.jpg")
# 创建可调整大小的窗口
cv2.namedWindow("Resizable Window", cv2.WINDOW_NORMAL)  # 控制打印的大小
cv2.imshow("Resizable Window", img)      # 控制打印窗口大小img_data = torch.from_numpy(img)
print(img)
print(img_data)# 进行图片的反转
out = torch.flip(img_data,dims=[0])
out = out.numpy()                   # 一定要转化成numpy 才可以绘图
cv2.namedWindow("Resizable Window1", cv2.WINDOW_NORMAL)  # 控制打印的大小
cv2.imshow("Resizable Window1", out)      # 控制打印窗口大小
cv2.waitKey(0)

  这里需要我们添加一个模块:

pip install opencv-python

通过cv2读入数据,此时的数据类型是 numpy 类型,可以通过这两句代码展示出来,一般窗口很大,这两串代码可以控制窗口大小,双引号是自由命名,后面的 out 是图片数据。

cv2.namedWindow("Resizable Window1", cv2.WINDOW_NORMAL) # 控制打印的大小
cv2.imshow("Resizable Window1", out) # 控制打印窗口大小

图片 1 展示了numpy 格式的数据类型,至于转化后的 tensor就省略了。tensor数据并不能直接绘图,所以要使用 .numpy() 转化成numpy数据才能绘图。在此之前,我们使用torch.flip(数据,纬度数组) 进行数据反转处理,输出的结果如 图 2 所示。

图 1 numpy 格式
图 2 图片旋转对比

最后的鸣谢,暑假将至,我在我弟(以工作)这边度过了一段独属于我的成长时光。成年人也会添麻烦,我给他带来了不少麻烦,在这里,如果我的文章对大家有帮助,请大家帮我进一下我弟弟创业的小铺,买不买都无所谓,感谢大家阅读鄙人的文章和进入小店祝大家生活愉快。

http://www.xdnf.cn/news/13458.html

相关文章:

  • Java八股文——Spring「Spring 篇」
  • 5.4.2树、森林与二叉树的转换
  • 今日行情明日机会——20250611
  • Android GreenDAO 通过 Key 查询数据库数据慢问题优化
  • 13.自治系统路由计算题
  • Node.js:开启现代服务器端编程的新篇章
  • h5fortran 简介与使用指南
  • 新能源知识库(36)什么是BMU
  • 51LA数据分析遇瓶颈?免费统计工具——悟空统计
  • 大话软工笔记—工程分解
  • GlusterFS分布式文件系统
  • 【Keepalived】Keepalived-2.3.4恢复对RHEL7的支持
  • 第七章: SEO与渲染方式 三
  • (十一)优化算法(Optimization):深度学习训练中的收敛性分析与泛化理论
  • 鹰盾视频加密器Windows播放器AI溯源水印技术方案解析
  • ros2--Sophus
  • “新液冷”破题“智算热”,数字经济低碳化发展新解
  • 【Linux】Linux 操作系统 - 22 , 软硬链接详解 !
  • 104.解决在流式回答功能实现之后上传附件功能失效bug之前端处理
  • DAY 28 类的定义和方法
  • 三代社保卡全字段识别-社保卡识别软件-社保卡识别接口集成
  • 结合redis实现文件分片秒传断点续传
  • Linuxkernel学习-deepseek-2
  • Java-43 深入浅出 Nginx - 基本配置方式 nginx.conf Events块 HTTP块 反向代理 负载均衡
  • idea不同颜色总结
  • 【深尚想】LTR-390UV-01光宝环境光传感器电子元器件详细解析
  • HDFS 中 DataNode 挂载外部 S3 存储系统作为本地卷
  • 迁移科技3D视觉系统:开启袋子拆垛场景的智能革命新纪元
  • 53、错误处理-【源码分析】底层组件功能分析
  • Kafka消费者组位移重设指南