热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

关于Pytorch中permute(transpose)与view的区别

首先,这两者是不能混淆也很容易混淆的,而混淆后代码其实是能跑通的,但结果肯定有差异,这就很恶心。rpn_locsrpn_locs.permute(0,2,3,1).contiguo

首先,这两者是不能混淆也很容易混淆的,而混淆后代码其实是能跑通的,但结果肯定有差异,这就很恶心。

rpn_locs = rpn_locs.permute(0, 2, 3, 1).contiguous().view(n, -1, 4)

上面代码,在Faster-RCNN里,需要把rpn网络的一个输出,从batch_size*channel*height*weight的形式,变成batch_size*?*4的形式,如果直接用view去改变维度的话,则会混淆维度之间的信息,可以参考https://blog.csdn.net/weixin_41712499/article/details/108753170

 

举个例子:

a = torch.randn(4, 3, 32, 32)
a1 = a.transpose(1, 3).contiguous().view(4, 3*32*32).view(4, 32, 32, 3).transpose(1,3)

tensor([[[[True, True, True,  ..., True, True, True],
          [True, True, True,  ..., True, True, True],
          [True, True, True,  ..., True, True, True],
          ...,
          [True, True, True,  ..., True, True, True],
          [True, True, True,  ..., True, True, True],
          [True, True, True,  ..., True, True, True]],
......

这样能完全恢复数据维度信息,而

a.transpose(1, 3).contiguous().view(4, 3*32*32).view(4, 3, 32, 32)

则不能恢复


推荐阅读
author-avatar
隔壁老吴
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有