在torch中,如果要改变某一个tensor的维度,可以利用view、expand、repeat、transpose和permute等方法,这里对这些方法的一些容易混淆的地方做个总结。

expand和repeat

关于expand,例子如下:

a = torch.tensor([[[1, 2, 3]]])
a.shape
>> torch.size([1, 1, 3])b = a.expand(2, 1, 3)  # 该处的3对应a中3个数字,需要匹配,而由于其他维度没有数据体现,所以维度可以随意改变
b = a.expand(123, 2, 2421, 3)
b.shape
>> torch.size([123, 2, 2421, 3])
b = a.expand(532, 123, 1, 213, -1)  # 当某一维度为-1时,表示维持原维度数据不变
b = a.expand(2, 3)  # 这是错误的,需要对每个维度的数据扩增进行指示,只能大于或等于原数据维度,不可小于a = torch.tensor([[[1, 2, 3], [1, 2, 3]]])
a.shape
>> torch.size([1, 2, 3])
b = a.expand(2, 1, 3)  # 错误a = torch.tensor([[[1, 2, 3]], [[1, 2, 3]]])
a.shape
>> torch.size([2, 1, 3])
b = a.expand(10, 4, 12, 3)  # 错误

关于repeat,例子如下:

a = torch.tensor([[[1, 2, 3]]])
a.shape
>> torch.Size([1, 1, 3])b = a.repeat(2, 2, 4).shape
>> torch.Size([2, 2, 12])b = a.repeat(2, 2, 2, 4).shape
>> torch.Size([2, 2, 2, 12])b = a.repeat(-1, -1, 4).shape  # 错误,-1不可用在repeat中

repeat可以实现与expand同样的效果,但不同的是,repeat开辟了新的内存空间,返回了一个新的张量,而expand返回的张量与原版张量具有相同内存地址,例子如下:

a = torch.tensor([[[1, 2, 3]]])
b = a.expand(3, -1, -1, -1)
c = a.repeat(3, 1, 1, 1)print(a)
print(b)
print(c)print(a.data_ptr())
print(b.data_ptr())
print(c.data_ptr())a[0][0][2] = 666
print(a)
print(b)
print(c)

输出为:

tensor([[[1, 2, 3]]])tensor([[[[1, 2, 3]]],[[[1, 2, 3]]],[[[1, 2, 3]]]])tensor([[[[1, 2, 3]]],[[[1, 2, 3]]],[[[1, 2, 3]]]])1765580867264
1765580867264
1765577935296tensor([[[  1,   2, 666]]])tensor([[[[  1,   2, 666]]],[[[  1,   2, 666]]],[[[  1,   2, 666]]]])tensor([[[[1, 2, 3]]],[[[1, 2, 3]]],[[[1, 2, 3]]]])

可以看出,b与a有着相同的地址,b相当于是a的某种视图映射,但仍然受到a的影响,但c是另外开辟内存空间进行存储,不受a的影响。

torch中的expand和repeat相关推荐

  1. einops包中的rearrange,reduce, repeat及einops.layers.torch中的Rearrange,Reduce。对高维数据的处理方式

    from einops import rearrange, reduce, repeat from einops.layers.torch import Rearrange, Reduce 一.rea ...

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

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

  3. torch.max()、expand()、expand_as()使用讲解

    在分类问题中,通常需要使用max()函数对softmax函数的输出值进行操作,求出预测值索引,然后与标签进行比对,计算准确率.下面讲解一下torch.max()函数的输入及输出值都是什么,便于我们理解 ...

  4. Pytorch中tensor.expand()和tensor.expand_as()函数

    Pytorch中tensor.expand函数 Tensor.expand()函数详解 Tensor.expand_as()函数 Tensor.expand()函数详解 函数语法: # 官方解释: D ...

  5. torch中contiguous()函数

    1. 背景 torch中一些操作会改变原数据,比如:narrow() view() expand() transpose()等操作,在使用transpose()进行转置操作时,pytorch并不会创建 ...

  6. torch中的copy()和clone()

    torch中的copy()和clone() 1.torch中的copy()和clone() y = torch.Tensor(2,2):copy(x) --- 1 修改y并不改变原来的x y = x: ...

  7. openresty开发系列16--lua中的控制结构if-else/repeat/for/while

    openresty开发系列16--lua中的控制结构if-else/repeat/for/while一)条件 - 控制结构 if-else if-else 是我们熟知的一种控制结构.Lua 跟其他语言 ...

  8. torch中的topk()函数

    torch中的topk()函数 In [2]: import torchIn [3]: a=torch.randn((4,6))In [4]: a Out

  9. (原)torch中微调某层参数

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/6221664.html 参考网址: https://github.com/torch/nn/issues ...

最新文章

  1. 提取series中的数值_Mindfusion教程:WinForms中的实时图表
  2. 旷视首席科学家孙剑:深度学习变革视觉计算
  3. winform DataGrid排序、去掉第一的空白列
  4. Wilcox:子类化顶级窗口
  5. WPF 实现截屏控件之移动(二)(仿微信)
  6. S3C2440、S3C2450和S3C6410之间区别
  7. 计算机平面设计论文范,计算机平面设计论文关于计算机平面设计中汉字艺术论文范文参考资料...
  8. Linux 安装Nginx详细图解教程
  9. excel文件修复工具_ArcGIS工具箱使用技巧汇总
  10. 扫盲区分IaaS和PaaS
  11. Carlife Iphone IAP2连接与认证过程
  12. python打开word并定位_python自动化办公之 python操作Word
  13. 莫纳什大学招收AI/CV/ML/计算生物信息学和生物医学方向全奖博士研究生
  14. 【干货】如何写微信公众号文章:文章流畅耐读的奥秘
  15. 视频中的音频提取如何操作?一分钟教会你
  16. 修改时序约束改变slack_改变我们使用Slack的方式解决了我们的透明度和筒仓问题
  17. hive常用函数之其他函数
  18. 微信小程序的校园二手物品交易平台系统 uniapp 小程序
  19. Python爬取15万条《我是余欢水》弹幕,还原一个丧到极致的中年人生
  20. windows11修改中文用户名

热门文章

  1. 玫琳凯首席创新官Lucy Gildea在2022年妇女和女童参与科学国际日的声明
  2. 互联网晚报 | 10月7日 星期四 | 小米中东欧5G手机市占率排名第一;威马汽车将再获5亿美元融资;诺基亚首款平板T20发布...
  3. 1、fluentd安装
  4. android增量编译,GitHub - brok1n/androidBsdiffUpdate: Android增量更新项目源代码。带C源程序以及ndk编译好的so包。可以直接导出使用。...
  5. 计算机专业硕士学制,计算机研究生学制
  6. 2.2 复习过去式和过去完成时 现在完成时
  7. ext4 文件系统的特点、优缺点以及使用场景
  8. 8瓶水和3只小老鼠的故事(python解决)思路
  9. 微信小程序接口调用渲染
  10. Python简单数据库管理系统