即看即用 && 序列化和并行化 ( Serialization and Parallelism) && Pytorch官方文档总结 && 笔记 (四)

(1)名词解释

序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。

  • 以某种存储形式使自定义对象持久化;
  • 将对象从一个地方传递到另一个地方。
  • 使程序更具维护性。

并行处理(Parallel Processing)是计算机系统中能同时执行两个或多个处理的一种计算方法。并行处理可同时工作于同一程序的不同方面。并行处理的主要目的是节省大型和复杂问题的解决时间。为使用并行处理,首先需要对程序进行并行化处理,也就是说将工作各部分分配到不同处理进程(线程)中。

(2)本文涉及函数的列表(注释在代码中)

  1. torch.save                                  # 保存到一个硬盘文件上(pt文件)
  2. torch.load                                  # 加载磁盘文件(cpu / gpu)
  3. torch.set_num_threads            # 设置并行化的线程数
  4. torch.get_num_threads            # 获取并行化的线程数
  5. lambda(定义函数)                    # lambda arguments : expression

(3)代码示例(含注释) 

"""
序列化 Serialization
并行化 Parallelism
"""
import torch

# # 保存一个对象到一个硬盘文件上,即用来存放模型权重的pt文件
# t = torch.tensor([1., 6.])
# https://pytorch.org/docs/master/notes/serialization.html
t = {'weight': torch.tensor([1., 2.]), 'bias': torch.tensor([3., 4.])}
torch.save(obj=t, f='obj1.pt')  # 保存对象、文件名称

# # 从磁盘文件中读取一个通过 torch.save()保存的对象。
# # torch.load() 可通过参数 map_location 动态地进行内存重映射,使其能从不动设备中读取文件。
# # 一般调用时,函数需两个参数: storage 和 loc. 返回不同地址中的 storage,或着返回 None (此时地址可以通过默认方法进行解析).
# # 如果这个参数是字典的话,意味着其是从文件的地址标记到当前系统的地址标记的映射。
# # location tags 中 "cpu"对应 host tensors,‘cuda:device_id’ (e.g. ‘cuda:2’) 对应 cuda tensors。
obj1 = torch.load('obj1.pt')
# map_location – 一个函数或字典规定如何 remap 存储位置
obj2 = torch.load('obj1.pt', map_location=lambda storage, loc: storage)  # Load all tensors onto the CPU
obj3 = torch.load('obj1.pt', map_location={'cuda:1': 'cuda:0'})  # # Map tensors from GPU 1 to GPU 0

# # OpenMP(Open Multi-Processing): 共享存储并行编程
# # 设定用于并行化 CPU 操作的 OpenMP 线程数
torch.set_num_threads(6)
# # 获得用于并行化 CPU 操作的 OpenMP 线程数
obj4 = torch.get_num_threads()

# # lambda 函数可接受任意数量的参数,但只能有一个表达式。
# lambda arguments : expression
obj5 = lambda x, y: x ** y

print("*"*20, "obj1", "*"*20, "\n", obj1, "\n", obj2, "\n")
print("*"*20, "obj4", "*"*20, "\n", obj4, "\n")
print("*"*20, "obj5", "*"*20, "\n", obj5, "\n", obj5(3, 2), "\n")

 >>>output

******************** obj1 ******************** 
 {'weight': tensor([1., 2.]), 'bias': tensor([3., 4.])} 
 {'weight': tensor([1., 2.]), 'bias': tensor([3., 4.])} 

******************** obj4 ******************** 
 6 

******************** obj5 ******************** 
 <function <lambda> at 0x00000210EA2C2F28> 
 9 

***********************往期笔记 ***********************

即看即用 && 创建操作 (Creation Operations) && Pytorch官方文档总结 && 笔记 (一)_Flying Bulldog的博客-CSDN博客(1)本文涉及函数的列表(注释在代码中)torch.eyetorch.from_numpytorch.LongTensortorch.linspacetorch.logspacetorch.onestorch.randtorch.randntorch.randpermtorch.arangetorch.rangetorch.zeros(2)理解Tensor在深度学习里,Tensor实际上就是一个多维数组(multidimensional arrayhttps://blog.csdn.net/qq_54185421/article/details/124523093即看即用 && 索引,切片,连接,换位 (Indexing, Slicing, Joining, Mutating Ops) && Pytorch官方文档总结 && 笔记 (二)_Flying Bulldog的博客-CSDN博客(1)本文涉及函数的列表(注释在代码中)torch.cat 连接张量,和stack相似torch.chunk 分块torch.gather 聚合图解PyTorch中的torch.gather函数 - 知乎torch.index_select ...https://blog.csdn.net/qq_54185421/article/details/124546042?spm=1001.2014.3001.5502即看即用 && 随机抽样 ( Random sampling) && Pytorch官方文档总结 && 笔记 (三)_Flying Bulldog的博客-CSDN博客目录(1)本文涉及函数的列表(注释在代码中)(2)理解正态分布、均值和标准差(mean and std)(3)伯努利分布(别名:“零一分布”、“两点分布”)(4)代码示例(含注释)(1)本文涉及函数的列表(注释在代码中)torch.manual_seed # 设置种子,生成的随机数相同torch.initial_seed() #返回生成随机数的原始种子值torch.get_rng_state() ...https://blog.csdn.net/qq_54185421/article/details/124562710?spm=1001.2014.3001.5501

  >>>如有疑问,欢迎评论区一起探讨

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Flying Bulldog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值