pytorch张量维度变换详解:view、squeeze、transpose

目录

1 view函数

1.1 指定变换后的维度

1.2 自动推理变换后的维度

1.3 将tensor展平成一维

2 reshape函数

2.1 指定变换后的维度

2.2 自动推理转换后的维度

2.3 将tensor展平成一维

2.4 使用tensor.reshape变换

3 squeeze函数

3.1 torch.squeeze去除所有为1的维度

3.2 torch.squeeze指定dim去除

3.3 tensor.squeeze去除为1的维度

4 unsqueeze函数

4.1 torch.unsqueeze指定dim插入新维度

4.2 tensor.unsqueeze指定dim插入新维度

5 transpose函数

5.1 torch.transpose转置指定维度

5.2 tensor.transpose转置指定维度

6 expand函数

7 repeat函数

8 permute函数


 

Pytorch张量维度变化是在构建模型过程中常用且重要的操作,本文从实际应用触发,详细介绍常用的维度变化方法,这些方法包含view、reshap、squeeze、unsqueeze、transpose等。

1 view函数

Pytorch中的view函数主要用于Tensor维度的重构,即返回一个有相同数据但不同维度的Tensor。

view函数的操作对象是Tensor类型,返回的对象类型也为Tensor类型

    def view(self, *size: _int) -> Tensor: ...

更便于理解的表示形式:

view(参数a,参数b,…),其中,总的参数个数表示将张量重构后的维度。

1.1 指定变换后的维度

通过手工指定,将一个一维tensor变换为3*8维的tensor

import torch

a1 = torch.tensor([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 
                   13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24])

a2 = a1.view(3, 8)
print(a1)
print(a2)
print(a1.shape)
print(a2.shape)

运行程序显示如下:

tensor([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
        19, 20, 21, 22, 23, 24])
tensor([[ 1,  2,  3,  4,  5,  6,  7,  8],
        [ 9, 10, 11, 12, 13, 14, 15, 16],
        [17, 18, 19, 20, 21, 22, 23, 24]])
torch.Size([24])
torch.Size([3, 8])

1.2 自动推理变换后的维度

如果某个参数为-1,则表示该维度取决于其它维度,由Pytorch自己补充

import torch

a3 = torch.tensor([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
                   13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24])

a4 = a3.view(4, -1)
a5 = a3.view(2, 3, -1)
a6 = a3.view(-1, 3, 2)

print(a3)
print(a4)
print(a5)
print(a6)
print(a3.shape)
print(a4.shape)
print(a5.shape)
print(a6.shape)

 运行程序显示如下:

tensor([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
        19, 20, 21, 22, 23, 24])
tensor([[ 1,  2,  3,  4,  5,  6],
        [ 7,  8,  9, 10, 11, 12],
        [13, 14, 15, 16, 17, 18],
        [19, 20, 21, 22, 23, 24]])
tensor([[[ 1,  2,  3,  4],
         [ 5,  6,  7,  8],
         [ 9, 10, 11, 12]],
        [[13, 14, 15, 16],
         [17, 18, 19, 20],
         [21, 22, 23, 24]]])
tensor([[[ 1,  2],
         [ 3,  4],
         [ 5,  6]],
        [[
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

源启智能

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值