PyTorch中permute的用法

本文介绍PyTorch中permute与view函数的功能及应用实例。permute用于调整张量维度顺序,例如将图像从(28,28,3)转为(3,28,28),适用于数据预处理;view则改变张量形状而不改变数据,两者常用于神经网络中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

permute(dims)

将tensor的维度换位。

参数:参数是一系列的整数,代表原来张量的维度。比如三维就有0,1,2这些dimension。

例:

import torch
import numpy    as np

a=np.array([[[1,2,3],[4,5,6]]])


unpermuted=torch.tensor(a)
print(unpermuted.size())  #  ——>  torch.Size([1, 2, 3])



permuted=unpermuted.permute(2,0,1)
print(permuted.size())     #  ——>  torch.Size([3, 1, 2])

 再比如图片img的size比如是(28,28,3)就可以利用img.permute(2,0,1)得到一个size为(3,28,28)的tensor。

利用这个函数permute(0,2,1)可以把Tensor([[[1,2,3],[4,5,6]]]) 转换成

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

如果使用view,可以得到

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

关于view的用法:参见PyTorch中view的用法 

### PyTorch `permute` 函数详解 #### 功能描述 `torch.Tensor.permute(*dims)` 方法用于改变张量维度的顺序。此操作不会更改数据本身,仅重新排列其维度[^1]。 #### 参数说明 - *dims (int...)*: 新的维度顺序。整数序列应包含原张量所有的维索引,并且每个索引只出现一次。 #### 返回值 返回一个新的视图对象,具有指定的新维度顺序。 #### 使用场景 当需要调整多维数组(如图像通道、时间步长等)的位置时非常有用。例如,在计算机视觉任务中经常遇到将颜色通道从最后一维移动到第二维的情况。 #### 示例代码 以下是几个具体的例子来展示如何使用 `permute()`: ```python import torch # 创建一个形状为 [2, 3, 5] 的随机张量 tensor = torch.randn(2, 3, 5) print("原始张量:") print(tensor.shape) # 输出: torch.Size([2, 3, 5]) # 将第零维放到最后一位,其余保持不变 -> 形状变为 [3, 5, 2] transposed_tensor = tensor.permute(1, 2, 0) print("\n转置后的张量:") print(transposed_tensor.shape) # 输出: torch.Size([3, 5, 2]) ``` 对于四维卷积神经网络常用的 NCHW 格式的输入张量: ```python batch_size = 4 channels = 3 height = 28 width = 28 input_tensor = torch.rand((batch_size, channels, height, width)) output_tensor = input_tensor.permute(0, 2, 3, 1) # NHWC format print(f"\nNCHW to NHWC:\nOriginal shape {input_tensor.shape} \nPermuted shape {output_tensor.shape}") ``` 上述代码展示了如何把标准的 NCHW 数据格式转换成 TensorFlow 或者其他框架更常见的 NHWC 格式。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

York1996

您的打赏,是我更新的动力!

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

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

打赏作者

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

抵扣说明:

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

余额充值