pytorch reshape view性能对比 (以及einsum, matmul)
reshape和view
reshape 和 view的具体功能和区别就不介绍了,可以直接查看官网,简单来说,就是reshape会改变各个维度在存储中的物理位置,而view的话,只会改变索引。
那么我们在使用的时候,到底是选哪个呢?
先说结论:差不多~
einsum和matmul
具体用法参见官网,当我们想在维度比较高的tensor上做复杂的矩阵乘法的时候,往往会选择用einsum,因为比较清晰简单,但是如果有办法用matmul的时候,是不是会犹豫两个的性能呢?
结论:在有matmul有broadcast的情况下,einsum更快。简单情况没有测试,但是简单情况直接用matmul比较方便。
如果用for循环来实现einsum可以实现的复杂功能的话,会慢很多,所以千万不要用for loop!!!!
代码
import torch
import time
from collections import defaultdictdef generate_tensor(shape, num=1):return [torch.rand(shape).cuda() for _ in range(num)]def bench_view(datas, shape_to, repeat=1):out = []for _ in range(repeat):res = []for d in datas:tmp = d.view(shape_to)res.append(tmp)out.append(torch.cat(res, dim=0)[:2].shape)print(len(out))def bench_reshape(datas, shape_to, repeat=1):out = []for _ in range(repeat):res = []for d in datas:tmp = d.reshape(shape_to)res.append(tmp)out.append(torch.cat(res, dim=0)[:2].shape)print(len(out))def bench_einsum(data1, data2, repeat=1):out = []for _ in range(repeat):res = []for i in range(len(data1)):tmp = torch.einsum('btnf, kfc -> btknc', data1[i], data2[i])res.append(tmp)out.append(torch.cat(res, dim=0)[:2].shape)print(len(out))def bench_matmul(data1, data2, repeat=1):out = []for _ in range(repeat):res = []for i in range(len(data1)):# NOTE: if use for loop the speed is too low.# tmp = []# for j in range(data1[i].shape[1]):# left = data1[i][:,j,...].unsqueeze(dim=1)# tmp.append(torch.matmul(left, data2[i]))# tmp = torch.stack(tmp, dim=1)tmp = torch.matmul(data1[i], data2[i])res.append(tmp)out.append(torch.cat(res, dim=0)[:2].shape)print(len(out), out[0])class StopWatch:def __init__(self) -> None:self.times = defaultdict(list)def tk(self, key='default'):tkn = time.time()if key in self.times:print(f'key={key}, elapsed:', tkn - self.times[key][-1])self.times[key].append(tkn)def test_view_and_reshape():datas = generate_tensor(shape=(128, 300,30,10), num=10)sw = StopWatch()sw.tk()bench_view(datas, shape_to=(100, 64, 60, 30), repeat=1000)# bench_reshape(datas, shape_to=(100, 64, 60, 30), repeat=1000)sw.tk()def test_einsum_matmul():data1 = generate_tensor(shape=(128, 1, 300,30), num=5)data2 = generate_tensor(shape=(20, 30, 30), num=5)sw = StopWatch()sw.tk()bench_einsum(data1, data2, repeat=1000)# bench_matmul(data1, data2, repeat=1000)sw.tk()if __name__ == '__main__':# test_view_and_reshape()test_einsum_matmul()
pytorch reshape view性能对比 (以及einsum, matmul)相关推荐
- pytorch cpu gpu性能对比
经过同样的模型预测对比 gpu比cpu快38倍左右. gpu需要16ms 0 863001 1 22000 2 15001 3 16999 4 18000 5 15000 6 17000 7 1699 ...
- 科大讯飞/百度/阿里/腾讯(BAT)智能语音识别(ASR)性能对比选择预计价格分享 - pytorch中文网...
最近在做智能客服的时候需要使用到语音识别,所以了解和对比了各家平台的语音识别对比和分析! 一.科大讯飞 1.语音听写即在线音识别查看Demo 把语音(≤60秒)转换成对应的文字信息,让机器能够&quo ...
- Pytorch优化器全总结(四)常用优化器性能对比 含代码
目录 写在前面 一.优化器介绍 1.SGD+Momentum 2.Adagrad 3.Adadelta 4.RMSprop 5.Adam 6.Adamax 7.AdaW 8.L-BFGS 二.优化器对 ...
- **Pytorch 中view函数和reshape函数的区别*
Pytorch 中view函数和reshape函数的区别(我是一名大一刚学计算机的学生 希望我的说法对你有帮助) 首先:要了解这个问题我们要先了解一个基本知识 张量的储存方式 跟据图片我们可以清楚的看 ...
- TensorFlow与PyTorch模型部署性能比较
TensorFlow与PyTorch模型部署性能比较 前言 2022了,选 PyTorch 还是 TensorFlow?之前有一种说法:TensorFlow 适合业界,PyTorch 适合学界.这种说 ...
- Java常用消息队列原理介绍及性能对比
消息队列使用场景 为什么会需要消息队列(MQ)? 解耦 在项目启动之初来预测将来项目会碰到什么需求,是极其困难的.消息系统在处理过程中间插入了一个隐含的.基于数据的接口层,两边的处理过程都要实现这一 ...
- python 速度 memmap_浅析Python 读取图像文件的性能对比
浅析Python 读取图像文件的性能对比 发布时间:2020-08-30 16:31:06 来源:脚本之家 阅读:57 作者:BriFuture''s Blog 使用 Python 读取一个保存在本地 ...
- 各种URL生成方式的性能对比
在上一篇文章中我们列举了各种URL生成的方式,其中大致可以分为三类: 直接拼接字符串(方法一及方法二) 使用Route规则生成URL(方法三) 使用Lambda表达式生成URL(方法四及方法五) 我们 ...
- Struts2、SpringMVC、Servlet(Jsp)性能对比 测试 。 Servlet的性能应该是最好的,可以做为参考基准,其它测试都要向它看齐,参照...
2019独角兽企业重金招聘Python工程师标准>>> Struts2.SpringMVC.Servlet(Jsp)性能对比 测试 . Servlet的性能应该是最好的,可以做为参考 ...
最新文章
- linux之sort 命令详解
- Exchange Server 2016管理系列课件33.通讯组仲裁
- [C++] this指针
- Switch语句的参数是什么类型的?
- Linux 学习和教训
- OpenCV实战【2】HOG+SVM实现行人检测
- python dll load failed_python安装MySQLdb的问题 ImportError: DLL load failed
- kafka 查看消费者组
- [Bug]Superset通过pyhive连接Spark SQL表名获取失败
- keil5写c语言的步骤,keil5使用C51的详细操作步骤
- 多线程面试题:词频统计
- CSS:transform应用之立体魔方案例
- 太厉害了!28岁任北大博导的她,再获科学大奖!
- vue拼接html并绑定点击事件
- 找不到 cl.exe 解决办法
- YOLO5 旋转模型图片标注及训练
- 并不是越好的院校,考研专业课越难。
- linux 禁用IPv 6
- 46、linux开发笔记(主线更新)
- ORACLE基本使用
热门文章
- Docker学习和安装
- Docker 系列学习(二) 全面介绍docker
- 荣耀鸿蒙系统手机更新名单,华为鸿蒙系统开放升级,荣耀手机公布名单,18款领衔更新...
- 定制MFC多文档窗口的主框架背景
- ios7版 30天精通iPhone手机编程 第2天 第一个程序“Hello”
- vue-cli(vue脚手架)安装 详细教程
- python function gamma_Python中使用Gamma函数的累积分布函数
- 第十二篇 GoogLeNet——网络实战
- Php socket 考勤机,php-socket
- ProgressDialog总结