当前位置: 首页 > news >正文

pytorch:repeat()和expand()的区别

文章目录

    • repeat()和expand()的区别
      • expand()
      • repeat()
      • repeat()和expand()的区别
    • 参考

repeat()和expand()的区别

expand()

expand张量不会分配新的内存,只是在存在的张量上创建一个新的视图(view)

import torch

x = torch.tensor([1, 2, 3])
x = x.expand(2, 3)
print(x.shape)

'''
torch.Size([2, 3])
'''

expand()类似广播机制,我们将expand看成是torch.ones(),上述代码中x的原始shape为[3],当x.expand(2, 3)时,可以看成是x*torch.ones(2, 3),以shape的视角来看即是:
[ 3 ] ∗ [ 2 , 3 ] ↪ [ 1 , 3 ] ∗ [ 2 , 3 ] ⇝ [ 2 , 3 ] ∗ [ 2 , 3 ] [3]*[2, 3] \hookrightarrow [1,3]*[2,3] \rightsquigarrow [2,3]*[2,3] [3][2,3][1,3][2,3][2,3][2,3]

repeat()

沿着特定的维度重复这个张量,同时这个函数拷贝张量的数据

import torch

x = torch.tensor([1, 2, 3])
x = x.repeat(3, 2)
print(x)

'''
tensor([[1, 2, 3, 1, 2, 3],
        [1, 2, 3, 1, 2, 3],
        [1, 2, 3, 1, 2, 3]])
'''

repeat()和expand()的区别

import torch

a = torch.ones(3, 1).float()
b = a.expand(3, 4)
c = a.repeat(1, 4)

'''
data_ptr(): Returns the address of the first element of self tensor.
'''
print(a.data_ptr(), b.data_ptr(), c.data_ptr())
a[0, 0] = 3
print(f"b: {b}")
print(f"c: {c}")

'''
2151521637440 2151521637440 2151543296960
tensor([[3., 3., 3., 3.],
        [1., 1., 1., 1.],
        [1., 1., 1., 1.]])
tensor([[1., 1., 1., 1.],
        [1., 1., 1., 1.],
        [1., 1., 1., 1.]])
'''

expand()在原内存上返回一个新的视图,所以改变了a的值b也能看到不同,repeat是开辟新内存

参考

1、PyTorch学习笔记——repeat()和expand()区别

相关文章:

  • SpringBoot 整合 Shiro 实现动态权限加载更新+ Session 共享 + 单点登录
  • 国内内网穿透市场现状及头部厂商发展路线分析
  • JavaSE笔记——异常、断言
  • 通过静态LSP、LDP LSP、MPLS TE三种方式实现总部与分支的互通
  • python根据json数据画疫情分布地图
  • 一份不错的Java就业指导
  • 带你学懂数据结构中的八大排序(上)
  • IT30--IT与业务业务与ITIT价值(3年之约已满)
  • Docker的安装(Centos7)
  • 【动态规划篇】最少分割回文 编辑距离 不同的子序列
  • 嵌入式走过的路
  • 【面试高频题】难度 2/5,回溯算法经典运用
  • 程序员必备网站,建议收藏!
  • (四)汇编语言——简单程序
  • 【OpenFeign】【源码+图解】【六】创建FeignClient接口的代理(下)
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • ES2017异步函数现已正式可用
  • ES6--对象的扩展
  • es6要点
  • HTTP那些事
  • Java教程_软件开发基础
  • laravel with 查询列表限制条数
  • Magento 1.x 中文订单打印乱码
  • Python打包系统简单入门
  • SpiderData 2019年2月23日 DApp数据排行榜
  • spring boot下thymeleaf全局静态变量配置
  • Vue全家桶实现一个Web App
  • Vue实战(四)登录/注册页的实现
  • Wamp集成环境 添加PHP的新版本
  • Yii源码解读-服务定位器(Service Locator)
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 使用 @font-face
  • 算法系列——算法入门之递归分而治之思想的实现
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • RDS-Mysql 物理备份恢复到本地数据库上
  • 阿里云服务器购买完整流程
  • ​虚拟化系列介绍(十)
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • #QT(智能家居界面-界面切换)
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (八)c52学习之旅-中断实验
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (七)理解angular中的module和injector,即依赖注入
  • (转)VC++中ondraw在什么时候调用的
  • ./和../以及/和~之间的区别
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .md即markdown文件的基本常用编写语法
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .net core控制台应用程序初识
  • .net web项目 调用webService