PyTorch中关于tensor.repeat()的使用

 更新时间:2022年11月09日 10:58:51   作者:tomeasure  
这篇文章主要介绍了PyTorch中关于tensor.repeat()的使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

关于tensor.repeat()的使用

考虑到很多人在学习这个函数,我想在这里提 一个建议:

强烈推荐 使用 einops 模块中的 repeat() 函数 替代 tensor.repeat()!

它可以摆脱 tensor.repeat() 参数的神秘主义。

einops 模块文档地址:https://nbviewer.jupyter.org/github/arogozhnikov/einops/blob/master/docs/1-einops-basics.ipynb

学习 tensor.repeat() 这个函数的功能的时候,最好还是要观察所得到的 结果的维度。

不多说,看代码:

>>> import torch
>>> 
>>> # 定义一个 33x55 张量
>>> a = torch.randn(33, 55)
>>> a.size()
torch.Size([33, 55])
>>> 
>>> # 下面开始尝试 repeat 函数在不同参数情况下的效果
>>> a.repeat(1,1).size()     # 原始值:torch.Size([33, 55])
torch.Size([33, 55])
>>> 
>>> a.repeat(2,1).size()     # 原始值:torch.Size([33, 55])
torch.Size([66, 55])
>>> 
>>> a.repeat(1,2).size()     # 原始值:torch.Size([33, 55])
torch.Size([33, 110])
>>>
>>> a.repeat(1,1,1).size()   # 原始值:torch.Size([33, 55])
torch.Size([1, 33, 55])
>>>
>>> a.repeat(2,1,1).size()   # 原始值:torch.Size([33, 55])
torch.Size([2, 33, 55])
>>>
>>> a.repeat(1,2,1).size()   # 原始值:torch.Size([33, 55])
torch.Size([1, 66, 55])
>>>
>>> a.repeat(1,1,2).size()   # 原始值:torch.Size([33, 55])
torch.Size([1, 33, 110])
>>>
>>> a.repeat(1,1,1,1).size() # 原始值:torch.Size([33, 55])
torch.Size([1, 1, 33, 55])
>>> 
>>> # ------------------ 割割 ------------------
>>> # repeat()的参数的个数,不能少于被操作的张量的维度的个数,
>>> # 下面是一些错误示例
>>> a.repeat(2).size()  # 1D < 2D, error
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
RuntimeError: Number of dimensions of repeat dims can not be smaller than number of dimensions of tensor
>>>
>>> # 定义一个3维的张量,然后展示前面提到的那个错误
>>> b = torch.randn(5,6,7)
>>> b.size() # 3D
torch.Size([5, 6, 7])
>>> 
>>> b.repeat(2).size() # 1D < 3D, error
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
RuntimeError: Number of dimensions of repeat dims can not be smaller than number of dimensions of tensor
>>>
>>> b.repeat(2,1).size() # 2D < 3D, error
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
RuntimeError: Number of dimensions of repeat dims can not be smaller than number of dimensions of tensor
>>>
>>> b.repeat(2,1,1).size() # 3D = 3D, okay
torch.Size([10, 6, 7])
>>>

Tensor.repeat()的简单用法

相当于手动实现广播机制,即沿着给定的维度对tensor进行重复:

比如说对下面x的第1个通道复制三次,其余通道保持不变:

import torch

x = torch.randn(1, 3, 224, 224)
y = x.repeat(3, 1, 1, 1)
print(x.shape)
print(y.shape)

结果为:

torch.Size([1, 3, 224, 224])
torch.Size([3, 3, 224, 224])

这个在复制batch的时候用的比较多,上面的情况就相当于batch为1的3×224×224特征图复制成了batch为3

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • python机器学习实战之最近邻kNN分类器

    python机器学习实战之最近邻kNN分类器

    这篇文章主要介绍了python机器学习实战之最近邻kNN分类器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • python实现跨excel的工作表sheet之间的复制方法

    python实现跨excel的工作表sheet之间的复制方法

    今天小编就为大家分享一篇python实现跨excel的工作表sheet之间的复制方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • Python绘制折线图可视化神器pyecharts案例

    Python绘制折线图可视化神器pyecharts案例

    这篇文章主要介绍了Python绘制折线图可视化神器pyecharts,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-07-07
  • python解析模块(ConfigParser)使用方法

    python解析模块(ConfigParser)使用方法

    很多软件都有配置文件,今天介绍一下python ConfigParser模块解析配置文件的使用方法
    2013-12-12
  • python使用Plotly绘图工具绘制水平条形图

    python使用Plotly绘图工具绘制水平条形图

    这篇文章主要为大家详细介绍了python使用Plotly绘图工具绘制水平条形图,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-04-04
  • Python解压可迭代对象赋值给多个变量详解

    Python解压可迭代对象赋值给多个变量详解

    这篇文章主要为大家介绍了Python赋值多个变量,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12
  • Django中FilePathField字段的用法

    Django中FilePathField字段的用法

    这篇文章主要介绍了Django中FilePathField字段的用法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • Django3中的自定义用户模型实例详解

    Django3中的自定义用户模型实例详解

    这篇文章主要给大家介绍了关于Django3中自定义用户模型的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • 解析python高级异常和运算符重载

    解析python高级异常和运算符重载

    异常是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。 运算符重载,意味着在某个类的方法中拦截内置的操作,当类的实例出现在内置操作中,Python会调用你的方法,并且方法的返回值会作为相应操作的结果。本文主要介绍了python的高级异常和运算符重载
    2021-06-06
  • Python复制目录结构脚本代码分享

    Python复制目录结构脚本代码分享

    这篇文章主要介绍了Python复制目录结构脚本代码分享,本文分析了需求、讲解了匿名函数lambda等内容,并给出了脚本代码,需要的朋友可以参考下
    2015-03-03

最新评论