0404-Tensor的持久化和向量化
2021-04-24 17:41
99 查看
0404-Tensor的持久化和向量化作
[TOC]
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这个数据类型,从一二维过渡到高维,也将更容易上手。
这篇文章内容虽多,但从实用的角度来说,相对而言也比较全面,其中内容不需要全部熟稔于心,但至少得对每个方法都大概有个印象,知道有这个东西,这个东西能干啥!
相关文章推荐
- 深度学习模型的量化方法(论文学习 & tensorflow lite量化方法)
- tensorflow pb模型量化
- tensorflow Quantize(量化)
- tensorflow .pb文件模型量化
- TensorFlow Lite 采坑记(二):Model quantization 模型量化
- 浅谈大数据持久化概念
- NoSQL数据库之Redis数据库管理六 (Redis的高级应用之事务处理、持久化操作、pub_sub、虚拟内存)
- 《可以量化的经济学》马歇尔的均衡…
- 关于大数据 secondaryNameNode 持久化的简单总结
- ITQ迭代量化方法解析
- 贝克尔的人力资本—《可以量化的管…
- Unity数据持久化方法一:PlayerPrefs
- redis之RDB持久化策略
- 经济批量与单件流——《可以量化的管…
- hibernate持久化对象的状态
- iOS开发笔记-swift实现iOS数据持久化之归档NSKeyedArchiver
- 机器学习到底在量化金融里的哪些方面有应用?
- python简单回测系统 模拟回测 期货股票回测 量化回测 量化交易 jdhc
- iOS 数据持久化一-属性列表 Plist
- Docker 安装 Redis 并开启持久化