permute函数(Pytorch)

  • permute函数的作用是对tensor进行转置。
import torch
import torch.nn as nn

x = torch.randn(1, 2, 3, 4)
print(x.size())      
print(x.permute(2, 1, 0, 3).size())

随机生成一个1X2X3X4的四维向量,permute函数的参数表示的是转置后的向量位置。比如原向量中(1, 2, 3, 4),1的下标是0,2的下标是1,3的下标是2,4的下标是3;在x.permute(2, 1, 0, 3)中,2代表原来下表为2的数字3放在第一位(也就是N),1代表原来下表为1的数字2放在第二位(也就是C),0代表原来下表为0的数字1放在第三位(也就是H),3代表原来下表为3的数字4放在第四位(也就是W)。这样产生的结果如下:

torch.Size([1, 2, 3, 4])   #原来的tensor
torch.Size([3, 2, 1, 4])   #转置后的tensor
  • **torch.transpose()只能操作二维转置。**这个意思不是torch.transpose()只能作用于二维向量,它的意思是一次只能进行两个维度的转置,如果需要多个维度的转置,那么需要多次调用transpose()。比如上述的tensor[1,2,3,4]转置为tensor[3,4,1,2],使用transpose需要做如下
x.transpose(0,2).transpose(1,3)
  • view()函数作用的内存必须是连续的,如果操作数不是连续存储的,必须在操作之前执行contiguous(),把tensor变成在内存中连续分布的形式;
  • 我们来直观看一下tensor转置的实际效果。
import torch
import torch.nn as nn
import numpy as np

y = np.array([[[1, 2, 3], [4, 5, 6]]]) # 1X2X3
y_tensor = torch.tensor(y)
y_tensor_trans = y_tensor.permute(2, 0, 1) # 3X1X2
print(y_tensor.size())
print(y_tensor_trans.size())

print(y_tensor)
print(y_tensor_trans)
print(y_tensor.view(1, 3, 2)) 

torch.Size([1, 2, 3])
torch.Size([3, 1, 2])
tensor([[[1, 2, 3],
         [4, 5, 6]]])
tensor([[[1, 4]],

        [[2, 5]],

        [[3, 6]]])
tensor([[[1, 2],
         [3, 4],
         [5, 6]]])
  • view()函数是连续操作内存的,他会将1、2、3、4、5、6连续分配,上述是将1X2X3变成1X3X2。如果变成1X2X3,结果如下:
tensor([[[1, 2, 3],
         [4, 5, 6]]])
  • 19
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值