Pytorch中tensor.expand函数

  • Tensor.expand()函数详解
  • Tensor.expand_as()函数

Tensor.expand()函数详解

函数语法:

# 官方解释:
Docstring:
expand(*sizes) -> TensorReturns a new view of the :attr:`self` tensor with singleton dimensions expanded
to a larger size.

基本功能:

tensor.expand()函数可以将维度值包含 1 的Tensor(如:torch.Size([1, n])或者torch.Size([n, 1]))的维度进行扩展。其具体的扩展规则如下:

  1. 只能对维度值包含 1 的张量Tensor进行扩展,即:Tensor的size必须满足:torch.Size([1, n]) 或者 torch.Size([n, 1]) 。
  2. 只能对维度值等于 1 的那个维度进行扩展,无需扩展的维度务必保持维度值不变,或者置为-1,否则,报错。(简言之,只要是单维度均可进行扩展,但是若非单维度会报错。
  3. 扩展的Tensor不会分配新的内存,只是原来的基础上创建新的视图并返回;
  4. 新扩展维度的取值范围为:−1以及[1,+∞]区间内的任意整数-1以及[1, +∞]区间内的任意整数−1以及[1,+∞]区间内的任意整数,例如:将 torch.Size([1, n]) 扩展为torch.Size([m, n])时,新扩展维度 m 的可能取值为-1,或者 m ≥ 1的任意整数;
  5. 只能对张量Tensor进行维度扩展,而不能降维;否则,报错。
  6. tensor通过.expand()函数扩展某一维度后,tensor自身不会发生变化。

备注:
1、将 -1 传递给新扩展维度或者无需扩展维度均表示不更改该维度的尺寸。(Passing -1 as the size for a dimension means not changing the size of that dimension.)
2、如果令m=0,则会将原tensor变为空张量。示例如下:

a = torch.tensor([[2], [3], [4]])
print("a:\n", a)
print(a.size())
>>>
a:tensor([[2],[3],[4]])
torch.Size([3, 1])
# 将新扩展维度m置0时,原tensor变为空张量。
a.expand(3,0)
>>>
tensor([], size=(3, 0), dtype=torch.int64)

应用实例01: torch.Size([n, 1]) 扩展为 torch.Size([n, m])

import torcha = torch.tensor([[2], [3], [4]])   # 创建size为3行1列的张量
print("a:\n", a)
print(a.size())
>>>
a:tensor([[2],[3],[4]])
torch.Size([3, 1])
# (1)将torch.Size([3, 1])扩展为torch.Size([3, 2])
a.expand(3,2)
>>>
tensor([[2, 2],[3, 3],[4, 4]])
# (2)将 -1 赋值给“无需扩展维度”,同时将torch.Size([3, 1])扩展为torch.Size([3, 4])
a.expand(-1,4)   # 此处a.expand(-1,4)与a.expand(3,4)是等价的
>>>
tensor([[2, 2, 2, 2],[3, 3, 3, 3],[4, 4, 4, 4]])#(3)将 -1 赋值给“新扩展维度”,此时torch.Size([3, 1])将保持原状,不扩展。
a.expand(3,-1) # -1 means not changing the size of that dimension
>>>
tensor([[2],[3],[4]])
# (4)同时将 -1 赋值给“新扩展维度”和“无需扩展维度”,此时torch.Size([3, 1])将保持原状,不扩展。
a.expand(-1,-1)  # 此处a.expand(-1,-1)与a.expand(3,-1)是等价的
>>>
tensor([[2],[3],[4]])

如果原始Tensor的维度值中不包含1,则不能使用tensor.expand()函数进行扩展;否则,报错。 示例如下:

b = torch.tensor([[2, 1], [3, 5], [4, 7]])
print("b:\n", b)
print(b.size())
>>>
b:tensor([[2, 1],[3, 5],[4, 7]])
torch.Size([3, 2])
# 欲将torch.Size([3, 2])扩展为torch.Size([3, 4]),结果报错。
b.expand(3, 4)
>>>
---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
<ipython-input-24-0fa681906d91> in <module>
----> 1 b.expand(3, 4)RuntimeError: The expanded size of the tensor (4) must match the existing size (2) at non-singleton dimension 1.  Target sizes: [3, 4].  Tensor sizes: [3, 2]
# 欲将torch.Size([3, 2])降维至torch.Size([3, 1]),结果报错。
b.expand(3, 1)
>>>
---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
<ipython-input-26-3ca2598393c4> in <module>
----> 1 b.expand(3, 1)RuntimeError: The expanded size of the tensor (1) must match the existing size (2) at non-singleton dimension 1.  Target sizes: [3, 1].  Tensor sizes: [3, 2]

应用实例02: torch.Size([1, n]) 扩展为 torch.Size([m, n])

c = torch.tensor([[2, 1, 5, 8, 9]])  # 创建size为1行5列的张量
print("c:\n", c)
print(c.size())
>>>
c:
tensor([[2, 1, 5, 8, 9]])
torch.Size([1, 5])
# (1)将torch.Size([1, 5])扩展为torch.Size([3, 5])
c.expand(3,5)
>>>
tensor([[2, 1, 5, 8, 9],[2, 1, 5, 8, 9],[2, 1, 5, 8, 9]])
# (2)将 -1 赋值给“无需扩展维度”,同时将torch.Size([1, 5])扩展为torch.Size([3, 5])
c.expand(3,-1)  # 此处c.expand(3,-1)与c.expand(3,5)是等价的
>>>
tensor([[2, 1, 5, 8, 9],[2, 1, 5, 8, 9],[2, 1, 5, 8, 9]])
#(3)将 -1 赋值给“新扩展维度”,此时torch.Size([1, 5])将保持原状,不扩展。
c.expand(-1,5) # -1 means not changing the size of that dimension
>>>
tensor([[2, 1, 5, 8, 9]])
# (4) 欲将torch.Size([1, 5])扩展为torch.Size([3, 4]),结果报错。
c.expand(3,4)
>>>
---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
<ipython-input-37-f39aa37f0529> in <module>
----> 1 c.expand(3,4)RuntimeError: The expanded size of the tensor (4) must match the existing size (5) at non-singleton dimension 1.  Target sizes: [3, 4].  Tensor sizes: [1, 5]

Tensor.expand_as()函数

函数语法:

# 官方解释:
Docstring:
expand_as(other) -> TensorExpand this tensor to the same size as :attr:`other`.
``self.expand_as(other)`` is equivalent to ``self.expand(other.size())``.Please see :meth:`~Tensor.expand` for more information about ``expand``.Args:other (:class:`torch.Tensor`): The result tensor has the same sizeas :attr:`other`.
Type:      builtin_function_or_method

基本功能:

张量b和a.expand_as(b)的size是一样大的,并且是不共享内存的。

应用实例:

a = torch.tensor([[2], [3], [4]])
print("a:\n", a)
print(a.size())
>>>
a:tensor([[2],[3],[4]])
torch.Size([3, 1])b = torch.tensor([[2,2],[3,3],[5,5]])
print("b:\n", b)
print(b.size())
>>>
b:tensor([[2, 2],[3, 3],[5, 5]])
torch.Size([3, 2])
# 使用a.expand_as(b)将张量a的size——torch.Size([3, 1])扩展为与张量b的size——torch.Size([3, 2])同形的高维张量
a.expand_as(b)
>>>
tensor([[2, 2],[3, 3],[4, 4]])

Pytorch中tensor.expand()和tensor.expand_as()函数相关推荐

  1. pytorch中的expand()和expand_as()函数--扩展张量中某维数据的尺寸

    pytorch中的expand()和expand_as()函数 1.expand()函数: (1)函数功能: expand()函数的功能是用来扩展张量中某维数据的尺寸,它返回输入张量在某维扩展为更大尺 ...

  2. 详解pytorch中的常见的Tensor数据类型以及类型转换

    文章目录 概览 Tensor的构建 补充 类型转换 附录 概览 本文主要讲pytorch中的常见的Tensor数据类型,例如:float32,float64,int32,int64.构造他们分别使用如 ...

  3. 【PyTorch基础】——expand()和expand_as()

    1.expand()函数 功能: 扩展张量中某维数据的尺寸,返回输入张量在某维扩展为更大尺寸后的张量,且原始tensor和扩展后tensor不共享内存. 参数: 括号中输入参数为指定经过维度尺寸扩展后 ...

  4. python中numpy函数fft_如何在PyTorch中正确使用Numpy的FFT函数?

    我最近被介绍给Pythorch,开始浏览图书馆的文档和教程. 在"使用numpy和scipy创建扩展"教程中( http://pytorch.org/tutorials/advan ...

  5. 【Torch API】pytorch 中torch.ones_like和torch.zeros_like函数详解

    torch.ones_like函数和torch.zeros_like函数的基本功能是根据给定张量,生成与其形状相同的全1张量或全0张量,示例如下: input = torch.rand(2, 3) p ...

  6. Pytorch中torch.unsqueeze()和torch.squeeze()函数解析

    一. torch.squeeze()函数解析 1. 官网链接 torch.squeeze(),如下图所示: 2. torch.squeeze()函数解析 torch.squeeze(input, di ...

  7. pytorch中批量归一化BatchNorm1d和BatchNorm2d函数

    class torch.nn.BatchNorm1d(num_features, eps=1e-05, momentum=0.1, affine=True) [source] 对小批量(mini-ba ...

  8. PyTorch中 nn.Conv2d与nn.ConvTranspose2d函数的用法

    原文链接 1. 通道数问题 : 描述一个像素点,如果是灰度,那么只需要一个数值来描述它,就是单通道.如果有RGB三种颜色来描述它,就是三通道.最初输入的图片样本的 channels ,取决于图片类型: ...

  9. 【Pytorch】torch.Tensor.expand_as()与torch.Tensor.expand()使用与比较

    torch.Tensor.expand_as官方文档地址:https://pytorch.org/docs/stable/generated/torch.Tensor.expand_as.html?h ...

最新文章

  1. 现在的学生太强了,徒手撸了一个小米商城项目(附源码)!
  2. Struts2+Android (3) 多种方式向服务器发送信息
  3. ubuntu14.04无法连接有线连接问题
  4. Microsoft重申对F#的支持
  5. C可变参数详解及其函数设计
  6. linux日志服务是哪个,『学了就忘』Linux日志管理 — 2.日志服务rsyslogd
  7. 存储新技术之“连续数据保护(CDP)”
  8. SAP C4C里嵌入SAP Analytics Cloud的案例
  9. 如何在工作中快速成长?致工程师的10个技巧
  10. SpringMVC-高级参数绑定
  11. 毫米波雷达探测技术,雷达人体存在感应器,实时检测静止存在应用
  12. STM32——FLASH闪存编程原理与步骤
  13. SQLiteDatabaseLockedException: database is locked
  14. linux中添加程序,学习进阶 uClinux中添加用户应用程序
  15. 通信原理包络是什么意思_为什么齿轮不能少于17个齿,少于17个齿,齿轮传动会如何?...
  16. Unity中UI的LookAt效果实现
  17. ant安装配置问题:ANT_HOME is set incorrectly or ant could not be located. Please set ANT_HOME.
  18. mysql修改初始化得到的密码
  19. 五大算法之动态规划套路详解(1)
  20. python深度文字识别_【OCR技术系列之四】基于深度学习的文字识别(3755个汉字)...

热门文章

  1. python打地鼠游戏代码_Python 0基础开发游戏:打地鼠(详细教程)VS code版本
  2. 基于python和selenium爬取JD商城商品信息并且分析用户对于产品的满意程度
  3. 1 小时 47 分钟破 1000 亿, 双 11 十周年,你剁手了多少钱?
  4. Far manager基本操作指南
  5. 线程进程计算之多任务同步进行
  6. QT信号槽与connect的常见写法
  7. 用DD-WRT搭建私有计费WiFi热点教程
  8. “GANs”与“ODEs”:数学建模的终结?
  9. kitex 中 consistent hashing 的实现
  10. iPhone14到手先做啥,捷客特教你避雷手机配件“坑”