0404-Tensor的持久化和向量化
0404-Tensor的持久化和向量化作
pytorch完整教程目录:https://www.cnblogs.com/nickchen121/p/14662511.html
一、持久化
和sklearn中的持久化一样,保存一个模型或者特有的数据为pkl数据。但是tensor在加载数据的时候还可以把gpu tensor映射到cpu上或者其他gpu上。
1.1 保存模型
if t.cuda.is_available():
a = a.cuda(1) # 把a转为gpu1上的tensor
t.save(a, 'a.pkl')
1.2 加载模型
# 加载为b,存储于gpu1上(因为保存时tensor就在gpu1上)
b = t.load('a.pkl')
# 加载为c,存储于cpu
c = t.load('a.pkl', map_location=lambda storage, loc: storage)
# 加载为d,存储于gpu0上
d = t.load('a.pkl', map_location={'cuda:1': 'cuda:0'})
二、向量化
向量化计算是一种特殊的并行计算方法,通常是对不同的数据执行同样的一个或一批指令。由于Python原生的for循环效率低下,因此可以尽可能的使用向量化的数值计算。
def for_loop_add(x, y):
result = []
for i, j in zip(x, y):
result.append(i + j)
return t.Tensor(result)
x = t.zeros(100)
y = t.ones(100)
%timeit -n 100 for_loop_add(x,y)
%timeit -n 100 x+y
566 µs ± 100 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
3.25 µs ± 1.63 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
从上面可以看见,如果自己写一个方法实现内建函数,运行时间相差200倍,因为内建函数底层大多由c/c++实现,能通过执行底层优化实现高效计算。所以平时在写代码时,应该养成向量化的思维习惯。
三、注意事项
除了上述讲的大多数内容,最后还有以下三点需要注意:
- 大多数
t.function都有一个参数out,可以将其产生的结果保存在out指定的tensor之中 t.set_num_threads可以设置torch进行cpu多线程并行计算时所占用的线程数,用来限制torch所占用的cpu数目t.set_printoptions可以用来设置打印tensor时的数值精度和格式
b = t.FloatTensor()
t.randn(2, 3, out=b)
b
tensor([[ 1.4754, -0.7392, -0.1900],
[-0.8091, 0.2227, 0.8951]])
t.set_printoptions(precision=10)
b
tensor([[ 1.4753551483, -0.7392477989, -0.1899909824],
[-0.8091416359, 0.2227495164, 0.8951155543]])
四、第四章总结
这一章幅度较大,对于熟悉numpy的同学可能得心应手很多,如果对numpy不是特别熟悉的同学,建议先按照上述所给的教程学一遍numpy,再过来学习tensor这个数据类型,从一二维过渡到高维,也将更容易上手。
这篇文章内容虽多,但从实用的角度来说,相对而言也比较全面,其中内容不需要全部熟稔于心,但至少得对每个方法都大概有个印象,知道有这个东西,这个东西能干啥!
0404-Tensor的持久化和向量化的更多相关文章
- Tensor的向量化
向量化操作是指可以在同一时间进行批量地并行计算,例如矩阵运算,以达到更好效率的一种方式. 尽量使用向量化直接对Tensor操作,避免低效率的for循环对元素逐个操作.
- 深度学习框架PyTorch一书的学习-第三章-Tensor和autograd-1-Tensor
参考https://github.com/chenyuntc/pytorch-book/tree/v1.0 希望大家直接到上面的网址去查看代码,下面是本人的笔记 Tensor Tensor可以是一个数 ...
- 『PyTorch』第五弹_深入理解Tensor对象_下:从内存看Tensor
Tensor存储结构如下, 如图所示,实际上很可能多个信息区对应于同一个存储区,也就是上一节我们说到的,初始化或者普通索引时经常会有这种情况. 一.几种共享内存的情况 view a = t.arang ...
- 05_pytorch的Tensor操作
05_pytorch的Tensor操作 目录 一.引言 二.tensor的基础操作 2.1 创建tensor 2.2 常用tensor操作 2.2.1 调整tensor的形状 2.2.2 添加或压缩t ...
- Django整合Keras报错:ValueError: Tensor Tensor("Placeholder:0", shape=(3, 3, 1, 32), dtype=float32) is not an element of this graph.解决方法
本人在写Django RESful API时,碰到一个难题,老出现,整合Keras,报如下错误:很纠结,探索找资料近一个星期,皇天不负有心人,解决了 Internal Server Error: /p ...
- 6_1 持久化模型与再次加载_探讨(1)_三种持久化模型加载方式以及import_meta_graph方式加载持久化模型会存在的变量管理命名混淆的问题
笔者提交到gitHub上的问题描述地址是:https://github.com/tensorflow/tensorflow/issues/20140 三种持久化模型加载方式的一个小结论 加载持久化模型 ...
- 将keras模型在django中应用时出现的小问题——ValueError: Tensor Tensor("dense_2/Softmax:0", shape=(?, 8), dtype=float32) is not an element of this graph.
本文原出处(感谢作者提供):https://zhuanlan.zhihu.com/p/27101000 将keras模型在django中应用时出现的小问题 王岳王院长 10 个月前 keras 一个做 ...
- Pytorch学习笔记(二)——Tensor
一.对Tensor的操作 从接口的角度讲,对Tensor的操作可以分为两类: (1)torch.function (2)tensor.function 比如torch.sum(a, b)实际上和a.s ...
- day-20 tensorflow持久化之入门学习
如果不对模型参数进行保存,当训练结束以后,模型也在内存中被释放,下一轮又需要对模型进行重新训练,有没有一种方法,可以利用之前已经训练好的模型参数值,直接进行模型推理或者继续训练?这里需要引入一个数据之 ...
- tensorflow学习笔记——模型持久化的原理,将CKPT转为pb文件,使用pb模型预测
由题目就可以看出,本节内容分为三部分,第一部分就是如何将训练好的模型持久化,并学习模型持久化的原理,第二部分就是如何将CKPT转化为pb文件,第三部分就是如何使用pb模型进行预测. 一,模型持久化 为 ...
随机推荐
- 【Java】Input,Output,Stream I/O流 04 对象流&序列化
对象流,序列化机制 ObjectInputStream ObjectOutputStream 序列化 对象 写入转 数据 持久化 反序列化 数据 读取转 对象 活化 - 任何实现了Serializab ...
- Reinforcement 代码库
https://github.com/dragen1860?tab=repositories https://github.com/awjuliani?tab=repositories https:/ ...
- 【转载】 ImportError: libGL.so.1: cannot open shared object file: No such file or directory——docker容器内问题报错
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qq_35516745/article/de ...
- 所在单位近日购入Dell poweredge T640型号服务器,安装Ubuntu18.04.5 server操作系统,服务器万兆网卡,网线连接到千兆交换机上,不能识别网卡——解决方案
如题目所说: 所在单位近日购入Dell poweredge T640型号服务器,安装Ubuntu18.04.5 server操作系统,服务器万兆网卡,网线连接到千兆交换机上,不能识别网卡. 服务器 ...
- 洛谷P5250 【深基17.例5】木材仓库
[深基17.例5]木材仓库 题目描述 博艾市有一个木材仓库,里面可以存储各种长度的木材,但是保证没有两个木材的长度是相同的.作为仓库负责人,你有时候会进货,有时候会出货,因此需要维护这个库存.有不超过 ...
- Unreal使用GooglePAD生成AAB包,并加在fast-follow资源
1.修改obbfilter,设置需要添加到obb的pak文件 2.修改项目设置,打AAB包 3.cook stage生成所有Paks文件 4.将部分pak文件拷贝到Intermediate/Andro ...
- manim边学边做--圆形类
在manim的丰富图形库中,圆形类是一个基础且强大的模块.无论是简单的圆形绘制,还是复杂的圆形变换,它都能以简洁的代码实现. manim中圆形类的相关模块主要有3个: Circle:标准的圆形 Ann ...
- RedisTemplate常用方法
RedisTemplate常用方法 一.Redis常用的数据类型: String Hash List Set zSet Sorted set 二.RedisTemplate 常用 API 1. Str ...
- 快手 内推码:TYORVzmsw 秋招 应届生/实习生 真正本人内推 已有多人在我内推之后,接连顺利通过了HR筛选、用人部门筛选、面试!
内推码:TYORVzmsw 校园招聘岗位列表:https://campus.kuaishou.cn/#/campus/jobs?code=TYORVzmsw 真正的本人内部推荐! 已有多人在我内推之后 ...
- vscode注释快捷键
单行注释 ctrl+/ 多行注释 ctrl+alt+a 文档注释 /** 复制上面一行 ctrl+d 选中段落整体向左或向右缩进 ctrl +[ 或 ctrl + ] 查找 ctrl + f