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

图像通道转换——tensor从[h, w, c]转为[c, h, w] (permutetranspose和view的区别)(reshape和view)

如果我目前得到的tensor是[b,h,w,c]的,想保存成图片,但是tensor保存成图片需要[b,c,h,w]格式的

permute或者transpose就可以正常的转过去, 让之前[b,h,w,c]是的3通道,对应到[b,c,h,w]的3通道的位置上

transpose只是交换两个维度,permute()能交换多个维度。(transpose只能操作2D矩阵的转置,无法操作超过2个维度,所以要想实现多个维度的转置,既可以用一次性的permute,也可以多次使用transpose)

但是transpose、permute等操作会让tensor变得在内存上不连续,要加上.contiguouts()使其变得连续(但是内存是否连续现在来看也只是会影响view()的时候)

x = x.permute(1,2,0).contiguous()

x = x.transpose(2,0).contiguous()

但是用view,他只是给你拍平之后,换了一种对之前元素的截取方式,元素还是按顺序选的,转换后的3通道和之前的3通道是不对应的

transpose是这样

 view是这样

reshape和view是一样的。

view只适合对满足连续性条件(contiguous)的tensor进行操作,而reshape同时还可以对不满足连续性条件的tensor进行操作,即reshape更强大。view能干的reshape都能干,如果view不能干就可以用reshape来处理。可以认为 a.reshape = a.view() + a.contiguous().view()

所以以后可以默认先用reshape。

那么为什么没把view废除那?最近偶然看到了些资料,又想起了这个问题,觉得有以下原因:

1、在PyTorch不同版本的更新过程中,view先于reshape方法出现,后来出现了鲁棒性更好的reshape方法,但view方法并没因此废除。其实不止PyTorch,其他一些框架或语言比如OpenCV也有类似的操作。

2、view的存在可以显示地表示对这个tensor的操作只能是视图操作而非拷贝操作。这对于代码的可读性以及后续可能的bug的查找比较友好。
 

但是transpose的两维是可以跨越的

图像通道转换——从np.ndarray的[w, h, c]转为Tensor的[c, w, h]_莫邪莫急的博客-CSDN博客

相关文章:

  • linux服务器精确kill掉占用某几张卡的显存的程序
  • onnx 跨框架的模型中间表达框架(onnx.js)
  • Linux下删除文件后变成.nfsxxxxxx
  • linux lsof命令(查看哪个进程在占用文件)
  • TensorRT(GIE)
  • tensor与PIL.Image转换
  • numpy array与PIL.Image的转换
  • PyTorch Lightning (pl)
  • torch.jit (Python JIT) (Just-In-Time 即时编译器) (动态图转为静态图)
  • TorchScript (将动态图转为静态图)(模型部署)(jit)(torch.jit.trace)
  • linux grub菜单
  • linux lsblk 列出所有可用盘块/查看系统的磁盘
  • ssh连接对方机器环境改变
  • Python处理mat数据集
  • Python HDF5
  • __proto__ 和 prototype的关系
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • 2017前端实习生面试总结
  • C++11: atomic 头文件
  • flask接收请求并推入栈
  • Java Agent 学习笔记
  • maven工程打包jar以及java jar命令的classpath使用
  • pdf文件如何在线转换为jpg图片
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • tweak 支持第三方库
  • Vue小说阅读器(仿追书神器)
  • Wamp集成环境 添加PHP的新版本
  • 创建一种深思熟虑的文化
  • 读懂package.json -- 依赖管理
  • 简析gRPC client 连接管理
  • 将回调地狱按在地上摩擦的Promise
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 数据科学 第 3 章 11 字符串处理
  • 问题之ssh中Host key verification failed的解决
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • ​人工智能书单(数学基础篇)
  • #define 用法
  • #QT(串口助手-界面)
  • $forceUpdate()函数
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (C++20) consteval立即函数
  • (TOJ2804)Even? Odd?
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (九十四)函数和二维数组
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (三)elasticsearch 源码之启动流程分析
  • (十)c52学习之旅-定时器实验
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (顺序)容器的好伴侣 --- 容器适配器
  • (四)JPA - JQPL 实现增删改查
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功