Tensor维度变换

Tensor维度变换

有点意思

1 view/reshape

先来个4维tensor,实际意义是一个4张图片,通道一个,就是灰度图片,然后长宽都是28的图片
在这里插入图片描述
它的shape这个样子
在这里插入图片描述
这个直接给怼成了2维的,一个 4 x 784
在这里插入图片描述
reshape和view一个功能

在这里插入图片描述

其实完全随意可以升降维,但是要还原的话,shape的顺序要对,不然就不是原来的数据, 看看c和d就明白了
在这里插入图片描述

还有最好是用这种,size()的方式,或者你自己记得住也行,view或者reshape的shape要满足一个条件,就是元素要一样多就是numel(),多了,少了,都会报错的
在这里插入图片描述

2 squeeze vs unsqueeze

挤压和增加。。减少维度和增加维度, 基本的原则就是numel不能变

在这里插入图片描述
unsqueeze,这个就是在什么维度加1维,但是不能超过本身得维度限制,也是左闭又开[-a.dim()-1, a.dim() ]
比如 你有4维 变量dim得值只能是[-5, 4], -5->4 正值就在之前插入,负值就是在之后

其实view 和 shape 可以达到同样得效果,就是得多写点东东
在这里插入图片描述

下面就能明白unsqueeze的赋值的对应关系,就是在哪个位置加维,一次1维, reshape也行,就是写起来有点长,估计是怕维数很大,就有的unsqueeze和squeeze
在这里插入图片描述

squeeze 压缩饼干,干掉一个维度

在这里插入图片描述
这里只能干掉存在的维度,4维的维度索引就是[-4,3],而且必须这个维度的值为1才能干掉,
在这里插入图片描述

在这里插入图片描述

3 expand / repeat

expand , 扩展,只能扩展原来维度的size为1的东东,,不让你会报错的,不想写可以写-1
在这里插入图片描述

只能扩展原来维度的size为1的东东,,不让你会报错的,不想写可以写-1

这个是 expand的用法

在这里插入图片描述

repeat

慎用,小心把自己搞懵了
在这里插入图片描述
这个函数其实是重复当前的维度里面的数据几次的意思,看例子
在这里插入图片描述

4 .t

转换,2d的转置,就是这个样子的,其他维会直接报错
在这里插入图片描述

5 transpose

在这里插入图片描述
交换是好的,就是要记住自己都干了啥子,transpose之后需要再view的话,记得用下contiguous(),不要就报错了,一定要记得维度信息,不然,自己一通变之后数据就回不去了,b就是变异了,c回去了,保持清醒
在这里插入图片描述

在这里插入图片描述

6 permute

在这里插入图片描述

这个是transpose的加强版
输入的必须是所有的索引,不能多,不能少,不能重复
在这里插入图片描述
有点晕

发布了66 篇原创文章 · 获赞 7 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_36628778/article/details/103993383