张量形状任意改!PyTorch reshape、transpose 操作超详细教程

系列文章目录

Pytorch基础篇

01-PyTorch新手必看:张量是什么?5 分钟教你快速创建张量!
02-张量运算真简单!PyTorch 数值计算操作完全指南
03-Numpy 还是 PyTorch?张量与 Numpy 的神奇转换技巧
04-揭秘数据处理神器:PyTorch 张量拼接与拆分实用技巧
05-深度学习从索引开始:PyTorch 张量索引与切片最全解析
06-张量形状任意改!PyTorch reshape、transpose 操作超详细教程
07-深入解读 PyTorch 张量运算:6 大核心函数全面解析,代码示例一步到位!
08-自动微分到底有多强?PyTorch 自动求导机制深度解析

Pytorch实战篇

09-从零手写线性回归模型:PyTorch 实现深度学习入门教程
10-PyTorch 框架实现线性回归:从数据预处理到模型训练全流程
11-PyTorch 框架实现逻辑回归:从数据预处理到模型训练全流程
12-PyTorch 框架实现多层感知机(MLP):手写数字分类全流程详解



前言

在深度学习中,张量的形状操作是非常常见的需求。无论是为了适配网络层之间的数据传递,还是在数据处理过程中,都需要灵活地调整张量的形状。PyTorch 提供了丰富的函数用于调整张量的维度和形状。


一、reshape 函数

reshape 函数可以在保证张量数据不变的前提下,灵活地改变张量的形状。这在神经网络设计中经常被使用,用来适配不同网络层的数据传递需求。

1.1 示例代码

import torch

def example01():
    data = torch.tensor([[12, 24, 36], [48, 60, 72]])

    # 使用 shape 属性或者 size 方法获得张量的形状
    print("张量形状 (通过 shape):", data.shape)
    print("张量形状 (通过 size):", data.size())
    print('-' * 50)

    # 使用 reshape 函数修改张量形状
    reshaped_data = data.reshape(3, 2)
    print("reshape 后的张量形状:", reshaped_data.shape)
    print("reshape 后的张量:\n", reshaped_data)


if __name__ == '__main__':
    example01()

1.2 示例输出

张量形状 (通过 shape)<
### 张量形状的概念 张量形状是指描述张量各维度大小的一个元组。例如,一个形状为 `[2, 32, 32, 3]` 的张量是一个四维张量,每一维分别表示不同的物理意义,如图片数量、高度、宽度和通道数[^1]。在深度学习框架中,张量形状用于定义数据的空间布局。 #### 形状操作方法 在 TensorFlow 和 PyTorch 中,可以通过多种方法来操作张量形状: 1. **TensorFlow 中的形状操作** 使用 `tf.reshape()` 方法可以重新调整张量形状而不变其底层数据。例如: ```python import tensorflow as tf b = tf.constant([1, 2, 3, 4, 5, 6]) reshaped_b = tf.reshape(b, [2, 3]) # 将一维张量重塑为二维张量 print(reshaped_b) ``` 此外,在创建常量时也可以指定初始形状: ```python c = tf.constant([[1, 2], [3, 4]], shape=[2, 2]) print(c.shape) # 输出 (2, 2) ``` 2. **PyTorch 中的形状操作** 在 PyTorch 中,同样提供了 `.reshape()` 或 `.view()` 来修张量形状。`.reshape()` 是一种更安全的方法,因为它会在无法完成转换时抛出错误,而 `.view()` 则可能引发运行时异常[^2]。 下面是一些常见的例子: ```python import torch d = torch.arange(12).reshape(3, 4) # 创建并立即 reshape 成 3x4 矩阵 e = d.view(-1, 6) # 动态计算第一个维度,使其满足总元素不变条件 f = d.flatten() # 展平成一维张量 print(d) print(e) print(f) ``` 3. **动态尺寸推断** 当只知道部分目标形状时,可以用 `-1` 表示自动推导该位置上的具体数值。这适用于上述两个库中的大多数场景。 4. **转置和其他高级变换** 转置是一种特殊的形状变换形式,它交换某些轴的位置从而实现新的排列顺序。例如: ```python g = torch.randn(2, 3, 4) h = g.permute(2, 0, 1) # 把原第三轴移到第一位 i = g.transpose(0, 1) # 对前两轴互换 print(h.size()) print(i.size()) ``` 通过这些工具和技术,开发者能够灵活处理各种复杂的多维数组结构以适应不同算法的需求[^3][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

吴师兄大模型

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

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

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

打赏作者

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

抵扣说明:

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

余额充值