数据本身不发生改变,数据的访问方式发生了改变

1.维度的扩展

函数:unsqueeze()

# a是一个4维的
a = torch.randn(4, 3, 28, 28)
print('a.shape\n', a.shape) print('\n维度扩展(变成5维的):')
print('第0维前加1维')
print(a.unsqueeze(0).shape)
print('第4维前加1维')
print(a.unsqueeze(4).shape)
print('在-1维前加1维')
print(a.unsqueeze(-1).shape)
print('在-4维前加1维')
print(a.unsqueeze(-4).shape)
print('在-5维前加1维')
print(a.unsqueeze(-5).shape)

输出结果

a.shape
torch.Size([4, 3, 28, 28]) 维度扩展(变成5维的):
第0维前加1维
torch.Size([1, 4, 3, 28, 28])
第4维前加1维
torch.Size([4, 3, 28, 28, 1])
在-1维前加1维
torch.Size([4, 3, 28, 28, 1])
在-4维前加1维
torch.Size([4, 1, 3, 28, 28])
在-5维前加1维
torch.Size([1, 4, 3, 28, 28])

注意,第5维前加1维,就会出错

    # print(a.unsqueeze(5).shape)
# Errot:Dimension out of range (expected to be in range of -5, 4], but got 5)

连续扩维:unsqueeze()

    # b是一个1维的
b = torch.tensor([1.2, 2.3])
print('b.shape\n', b.shape)
print()
# 0维之前插入1维,变成1,2]
print(b.unsqueeze(0))
print()
# 1维之前插入1维,变成2,1]
print(b.unsqueeze(1)) # 连续扩维,然后再对某个维度进行扩张
print(b.unsqueeze(1).unsqueeze(2).unsqueeze(0).shape)

输出结果

b.shape
torch.Size([2]) tensor([[1.2000, 2.3000]]) tensor([[1.2000],
[2.3000]])
torch.Size([1, 2, 1, 1])

2.挤压维度

函数:squeeze()

    # 挤压维度,只会挤压shape为1的维度,如果shape不是1的话,当前值就不会变
c = torch.randn(1, 32, 1, 2)
print(c.shape)
print(c.squeeze(0).shape)
print(c.squeeze(1).shape) # shape不是1,不会变
print(c.squeeze(2).shape)
print(c.squeeze(3).shape) # shape不是1,不会变

输出结果

torch.Size([1, 32, 1, 2])
torch.Size([32, 1, 2])
torch.Size([1, 32, 1, 2])
torch.Size([1, 32, 2])
torch.Size([1, 32, 1, 2])

3.维度扩张

函数1:expand():扩张到多少,

    # shape的扩张
# expand():对shape为1的进行扩展,对shape不为1的只能保持不变,因为不知道如何变换,会报错 d = torch.randn(1, 32, 1, 1)
print(d.shape)
print(d.expand(4, 32, 14, 14).shape)

输出结果

torch.Size([1, 32, 1, 1])
torch.Size([4, 32, 14, 14])

函数2:repeat()方法,扩张多少倍

    d=torch.randn([1,32,4,5])
print(d.shape)
print(d.repeat(4,32,2,3).shape)

输出结果

torch.Size([1, 32, 4, 5])
torch.Size([4, 1024, 8, 15])

Pytorch-tensor维度的扩展,挤压,扩张的更多相关文章

  1. Pytorch Tensor 维度的扩充和压缩

    维度扩展 x.unsqueeze(n) 在 n 号位置添加一个维度 例子: import torch x = torch.rand(3,2) x1 = x.unsqueeze(0) # 在第一维的位置 ...

  2. pytorch tensor 维度理解.md

    torch.randn torch.randn(*sizes, out=None) → Tensor(张量) 返回一个张量,包含了从标准正态分布(均值为0,方差为 1)中抽取一组随机数,形状由可变参数 ...

  3. pytorch 中改变tensor维度的几种操作

    具体示例如下,注意观察维度的变化 #coding=utf-8 import torch """改变tensor的形状的四种不同变化形式""" ...

  4. PyTorch中的C++扩展

    今天要聊聊用 PyTorch 进行 C++ 扩展. 在正式开始前,我们需要了解 PyTorch 如何自定义module.这其中,最常见的就是在 python 中继承torch.nn.Module,用 ...

  5. [TensorFlow]Tensor维度理解

    http://wossoneri.github.io/2017/11/15/[Tensorflow]The-dimension-of-Tensor/ Tensor维度理解 Tensor在Tensorf ...

  6. tensorflow中的函数获取Tensor维度的两种方法:

    获取Tensor维度的两种方法: Tensor.get_shape() 返回TensorShape对象, 如果需要确定的数值而把TensorShape当作list使用,肯定是不行的. 需要调用Tens ...

  7. Pytorch 张量维度

    Tensor类的成员函数dim()可以返回张量的维度,shape属性与成员函数size()返回张量的具体维度分量,如下代码定义了一个两行三列的张量: f = torch.randn(2, 3) pri ...

  8. Pytorch Tensor 常用操作

    https://pytorch.org/docs/stable/tensors.html dtype: tessor的数据类型,总共有8种数据类型,其中默认的类型是torch.FloatTensor, ...

  9. Pytorch Tensor, Variable, 自动求导

    2018.4.25,Facebook 推出了 PyTorch 0.4.0 版本,在该版本及之后的版本中,torch.autograd.Variable 和 torch.Tensor 同属一类.更确切地 ...

  10. tensor维度变换

    维度变换是tensorflow中的重要模块之一,前面mnist实战模块我们使用了图片数据的压平操作,它就是维度变换的应用之一. 在详解维度变换的方法之前,这里先介绍一下View(视图)的概念.所谓Vi ...

随机推荐

  1. Zabbix6.0使用教程 (三)—zabbix6.0的安装要求

    接上篇,我们继续为大家详细介绍zabbix6.0的使用教程之zabbix6.0的安装部署.接下来我们将从zabbix部署要求到四种不同的安装方式逐一详细的为大家介绍.本篇讲的是部署zabbix6.0的 ...

  2. guava和redis 都是缓存用的,不过redis要起服务,guava不用起服务

    guava和redis 都是缓存用的,不过redis要起服务,guava不用起服务

  3. @hook:updated="$common.lib.consoleInfo('updated')" vue外层插入监听事件

    @hook:updated="$common.lib.consoleInfo('updated')" vue外层插入监听事件

  4. C++学习笔记之进阶编程

    目录 进阶编程 STL(Standard Template Library) 容器(container) 仿函数(functor) 算法(algorithm) transform 查找 全排列 迭代器 ...

  5. Inno setup 脚本判断 Microsoft Visual C++ Redistributable 不同版本区别

    有个需要是需要在安装包安装初始化时安装 Microsoft Visual c++ 2013 Redistributable 也就是判断软件安装前需不需要运行 vcredist_x64.exe 和 VC ...

  6. 基于R语言的raster包读取遥感影像

      本文介绍基于R语言中的raster包,读取单张或批量读取多张栅格图像,并对栅格图像数据加以基本处理的方法. 1 包的安装与导入   首先,我们需要配置好对应的R语言包:前面也提到,我们这里选择基于 ...

  7. Java加密技术(三)——PBE算法

    Javapbe对称加密     除了DES,我们还知道有DESede(TripleDES,就是3DES).AES.Blowfish.RC2.RC4(ARCFOUR)等多种对称加密方式,其实现方式大同小 ...

  8. Lambda Web Browser使用教程

    Lambda web browser是一个功能强大的UE内置浏览器插件, 允许用户在编辑器模式和运行时启动一个浏览器窗口, 对于一些采用传统BS架构的项目而言, 控制页面都放在前段, 若想要将控制页面 ...

  9. 记录-js基础练习题

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 隔行换色(%): window.onload = function() { var aLi = document.getElementsB ...

  10. java使用Ffmpeg合成音频和视频

    1.Maven依赖 <!-- 需要注意,javacv主要是一组API为主,还需要加入对应的实现 --> <dependency> <groupId>org.byte ...