图像通道转换——tensor从[h, w, c]转为[c, h, w] (permute&transpose和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博客

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
tensor.transposeTensorFlow中的一个函数,用于对张量进行转置操作。该函数的定义可以在tensorflow/python/ops/array_ops.py文件中找到。通过transpose函数,可以改变张量中各个维度的顺序。 另外,还有其他几个函数也可以用于改变张量的形状,如tensor.view()、tensor.squeeze()、tensor.unsqueeze()、tensor.resize_()和tensor.reshape()等。这些函数可以用来改变张量的维度或者形状。例如,tensor.view()可以改变张量的形状,而tensor.squeeze()和tensor.unsqueeze()可以压缩或扩展张量的维度,tensor.resize_()可以调整张量的大小,而tensor.reshape()可以改变张量的形状和维度。 当然,tensor.transpose()和tensor.permute()都是用于进行维度转换的方法。不同之处在于,tensor.transpose()只能交换两个维度的位置,而tensor.permute()可以同时交换多个维度的位置,可以通过多次调用transpose函数来完成permute操作。具体操作可以参考代码示例。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Tensorflow:转置函数 transpose的使用详解](https://download.csdn.net/download/weixin_38609693/13738375)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [tensor张量维度操作的汇总与对比](https://blog.csdn.net/weixin_44295653/article/details/111234752)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值