IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> pytorch学习06:Tensor维度变换 -> 正文阅读

[人工智能]pytorch学习06:Tensor维度变换

view reshape 重塑

import torch

a = torch.rand(4, 1, 28, 28)

print("a.shape:", a.shape)
print("a.view(4, 28*28):", a.view(4, 28*28).shape)
print("a.view(4*28, 28):", a.view(4*28, 28).shape)
print("a.view(4, 28, 28):", a.view(4, 28, 28).shape)
print("a.reshape(4, 28, 28):", a.reshape(4, 28, 28).shape)

在这里插入图片描述

  • 注意:view的维度乘积与原来维度乘积不同会报错
  • view可用reshape相互替换

unsqueeze 展开

import torch

a = torch.rand(4, 3, 28, 28)

print("a.shape:", a.shape)
# [0] 4 [1] 3 [2] 28 [3] 28 [4]
# 在[0]处添加一个维度
print("a.unsqueeze(0).shape", a.unsqueeze(0).shape)
# 在最后一个,即[4]处添加一个维度
print("a.unsqueeze(-1).shape", a.unsqueeze(-1).shape)
# 在[4]处添加一维
print("a.unsqueeze(4).shape", a.unsqueeze(4).shape)
# 在倒数第四,即[1]处添加一维
print("a.unsqueeze(-4).shape", a.unsqueeze(-4).shape)
# 在倒数第五,即[0]处添加一维
print("a.unsqueeze(-5).shape", a.unsqueeze(-5).shape)

在这里插入图片描述

squeeze 挤压

import torch

a = torch.rand(1, 32, 1, 1)

# 不给参数会删除所有能删减的维度
# 给了参数会删除特定的维度
print("a.squeeze().shape:", a.squeeze().shape)
print("a.squeeze(0).shape:", a.squeeze(0).shape)
print("a.squeeze(-1).shape:", a.squeeze(-1).shape)
print("a.squeeze(1).shape:", a.squeeze(1).shape)
print("a.squeeze(-4).shape:", a.squeeze(-4).shape)

在这里插入图片描述

expand 扩展1:广播

并没有增加内存,只是使用时进行复制

import torch

b = torch.rand(1, 3, 1, 1)

# 只有值为1的维度参能扩展
print("b.expand([2, 3, 2, 2]).shape: ",
      b.expand([2, 3, 2, 2]).shape)

# -1 表示维度保持不变
print("b.expand([-1, -1, -1, -1]).shape: ",
      b.expand([-1, -1, -1, -1]).shape)

# 这个 -4 没有意义且使用时会报错
print("b.expand([-1, 3, -1, -4]).shape: ",
      b.expand([-1, 3, -1, -4]).shape)

在这里插入图片描述

repeat 扩展2:复制

复制了数据,增加了内存

import torch

b = torch.rand(1, 3, 1, 1)

# repaet的参数并不是扩展后的维度,而是数据复制的数量
print("b.repeat(2, 3, 2, 2).shape:", b.repeat(2, 3, 2, 2).shape)
print("b.repeat(2, 1, 2, 1).shape:", b.repeat(2, 1, 2, 1).shape)

在这里插入图片描述

.t 转置

import torch

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

print("b:\n", b)
print("b.t():\n", b.t())

在这里插入图片描述

  • 注意:转置只适用于2维矩阵

transpose 维度交换

import torch

a = torch.rand(4, 3, 28, 14)
print("a.transpose(1,3).shape", a.transpose(1,3).shape)

# transpose改变维度并不会改变数据底层存储
# contiguous可用让底层存储与改变后的维度相关
a1 = a.transpose(1,3).contiguous().view(4, 3*28*14).view(4, 3, 28, 14)
a2 = a.transpose(1,3).contiguous().view(4, 3*28*14).view(4, 14, 28, 3).transpose(1, 3)

# 判断元素是否全部相等
print("a == a1? ", torch.all(torch.eq(a, a1)))
print("a == a2? ", torch.all(torch.eq(a, a2)))

# 后三维合并后,在原始数据中的表示为 [14, 28, 3]
# 如果直接重塑为 [3, 28, 14] 会丢失数据原有意义,因此 a 与 a1 不相等
# 先转换成[14, 28, 3],再交换 14 和 3,就会恢复原始数据,因此 a 与 a2 相等

在这里插入图片描述

permute 维度重排

import torch

a = torch.rand(4, 3, 28, 14)
# 将维度按参数顺序重排列
print("a.permute(3, 2, 1, 0): ", a.permute(3, 2, 1, 0).shape)
print("a.permute(1, 3, 0, 2): ", a.permute(1, 3, 0, 2).shape)

在这里插入图片描述

  • 注意:permute不会改变底层数据存储,需要使用 contiguous 来修改存储方式。
  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-07-29 11:38:10  更:2021-07-29 11:40:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/22 10:02:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码