PyTorch 维度变换-Tensor基本操作

以如下 tensor a 为例,展示常用的维度变换操作

python3 复制代码
>>> a = torch.rand(4,3,28,28)
>>> a.shape
torch.Size([4, 3, 28, 28])
  • view / reshape 两者功能完全相同: a.view(shape)

    python3 复制代码
    >>> a.view(4,3,28*28)  		## a.view(4,3,28,28) 可恢复
  • squeeze / unsqueeze: a.unsqueeze(dim), a.squeeze(dim) 只能挤压 1 维度

    python3 复制代码
    >>> a.unsqueeze(0).shape	## a.squeeze(0) 可恢复
    torch.Size([1, 4, 3, 28, 28])
  • transpose / permute:.t() 只能用于二维矩阵

    python3 复制代码
    >>> a.transpose(0,1).shape    ## 两两交换:交换 0 1 维度
    torch.Size([3, 4, 28, 28])
    >>> a.permute(0,1,2,3).shape  ## 新置维度,非两两交换,更方便 
    torch.Size([4, 3, 28, 28])
  • expand / repeat 两者效果完全相同 expand 高效更推荐

    python3 复制代码
    >>> a.unsqueeze(0).expand(2,4,3,28,28).shape  # 只能拓展 1 维度的
    torch.Size([2, 4, 3, 28, 28])
    >>> a.unsqueeze(0).repeat(2,1,1,1,1).shape    # 不是填目标维度,而是填每个维度的重复次数   
    torch.Size([2, 4, 3, 28, 28])
  • broadcasting 自动扩张:基于已有的小维度的值 自动 进行广播拓展

    python3 复制代码
    >>> b = a+torch.tensor(1) 
    >>> b.shape
    torch.Size([4, 3, 28, 28])

相关推荐
Tech_Lin12 分钟前
手搓工具之手写签字识别提取工具
python
Amber_3723 分钟前
php的数组和python的列表 -- 横向对比学习
python·学习·php
No.Ada23 分钟前
《基于机器学习的脑电认知负荷识别研究与应用》论文笔记
人工智能·机器学习
中文Python37 分钟前
小白中文Python-双色球LSTM模型出号程序
开发语言·人工智能·python·lstm·中文python·小白学python
WKJay_42 分钟前
VSCode 1.106 版本发布 —— 更强 AI 特性,更丝滑的编程体验!
ide·人工智能·vscode
superbadguy1 小时前
用curl实现Ollama API流式调用
人工智能·python
嚴 帅1 小时前
Pytnon入门学习(一)
python
小兵张健1 小时前
Java + Spring 到 Python + FastAPI (二)
java·python·spring
N 年 后1 小时前
dify的是什么?怎么使用?
人工智能
腾讯云开发者1 小时前
架构火花|产品经理和程序员谁会先被AI淘汰?
人工智能