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

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. Educational Codeforces Round 65 (Rated for Div. 2)C. News Distribution(模拟,计算的时候去重)

    这道题目明显和出现4次的数和出现2次的数的个数有关系,只需要在每次更新之后维护这两个信息即可,我们在算出现2次的数的个数时其实会把出现4次的数的个数会把出现2次的数的个数+2,在判断时需要考虑这一点. ...

  2. history = his + story 男性史 = 历史 学单词

    history = his + story 男性史 = 历史 早先还有 herstory 由于女性地位底下,就由 history 代表历史了. 然后 history 由拉丁文过来 story 从法语过 ...

  3. pcm5102芯片解析之基本概念

    一 前记 1 在音频领域深耕,那就要不断的前行.最近有几个项目需要用到pcm5102这颗料,藉此机会,针对这个料进行深入的研究一下.做一一些简要的分析. 二 概念 音频芯片的指标,其实,很多年都没啥变 ...

  4. 主题 3 编辑器(Vim)

    主题 3 编辑器(Vim) 编辑器 (Vim) · the missing semester of your cs education (missing-semester-cn.github.io) ...

  5. eclipse错误之Errors occurred during the build. Errors running builder 'JavaScript Validator' on project

    把JavaScript Validator去掉.去掉的方法是:选择一个项目--右键Properties--Builders(排第二)--点一下右侧会有四项--取消第一项"JavaScript ...

  6. 01_Mac安装Homebrew

    目录 1 官方 1.1 前提 1.2 安装 2 其他安装方法 2.1 安装homebrew-core 2.2 安装homebrew-cask 3 源 3.1 查看源 3.2 设置源 3.3 设置bot ...

  7. vue+springboot图片上传和显示

    一.前言 在使用spring boot做后台系统,vue做前端系统,给客户开发一套系统时候,其中用到了图片上传和显示的功能. 二.环境 前端:vue 前端组件:tinymce 后台:spring bo ...

  8. 从零开始学Spring Boot系列-集成Kafka

    Kafka简介 Apache Kafka是一个开源的分布式流处理平台,由LinkedIn公司开发和维护,后来捐赠给了Apache软件基金会.Kafka主要用于构建实时数据管道和流应用.它类似于一个分布 ...

  9. 快速上手系列:HTML

    一 HTML 基本元素 基本结构 <html> <head> <meta http-equiv="Content-Type" content=&quo ...

  10. verilog的文件流和项目流

    verilog的文件流和项目流 1.写在前面 在学习FPGA时,一般都是从项目流入手的.从一个集成的开发环境创建一个工程.通过一个个组件的编写和设置来实现某个项目.这样的操作固然简单,对于设计者来说只 ...