首页 > 编程语言 >PyTorch项目源码学习(2)——Tensor代码结构初步学习

PyTorch项目源码学习(2)——Tensor代码结构初步学习

时间:2024-01-10 17:58:46浏览次数:36  
标签:__ Tensor torch PyTorch 源码 type class

PyTorch版本:1.10.0

Tensor

Tensor是Pytorch项目较为重要的一部分,其中的主要功能如存储,运算由C++和CUDA实现,本文主要从前端开始探索学习Tensor的代码结构。

结构探索

PyTorch前端位于torch目录下,从_tensor.py可以找到Tensor的python定义,可以看到其继承自torch._C._Tensorbase

而Tensorbase的定义可以从torch/_C目录下的__init__.pyi.in文件中找到

可以看到这里传入了metaclass的参数,同时注释表明_TensorBase 和 _TensorMeta的定义存在于python_variable.cpp中

学习一下metaclass相关知识。参考来源于 https://blog.csdn.net/jiguanglong/article/details/93204314

Python除了部分特殊符号之外都是对象,类同样是对象,为了便于理解,可以认为它们相比普通对象,多了可以被实例化的特点。

所有的对象应该拥有基本属性__class__(属于什么类),而所有的类在此基础上应该拥有另一个基本属性__bases__(父类)。如果进行实验可以发现:
一直通过__class__追溯上去,type是最终的顶点(type的__class__指向自己);
一直通过__bases__追溯上去,object是最终的顶点(object的__bases__为空)。

因此可以称type为元类(一般类的类),当我们进行类定义的时候,实际上运行的是class = type(classname, superclasses, attributedict) (也就是type的__call__方法)

而如果传递了metaclass参数,此时类创建的动作就不再由type执行,而是执行参数对象的__call__方法。

有什么用:通过这种改变元类的方法,我们可以在类创建的过程中增加自定义的工作,该特性极大地提高了编程的自由度。

进一步,在torch/csrc/autograd/python_variable.cpp 中可以找到上面Base与Meta类的定义来源

1509与1518行分别对这两个类的定义和文件中的C++对象进行了绑定(module在这里是pytorch前端的_C),进而找到

因此表面上的结构可以表示成如下

标签:__,Tensor,torch,PyTorch,源码,type,class
From: https://www.cnblogs.com/int-me-X/p/17957022

相关文章

  • SpringBoot中使用单例模式+ScheduledExecutorService实现异步多线程任务(若依源码学习
    场景若依前后端分离版手把手教你本地搭建环境并运行项目:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/108465662设计模式-单例模式-饿汉式单例模式、懒汉式单例模式、静态内部类在Java中的使用示例:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/......
  • 仿冒转转闲鱼钓鱼链接源码 闲鱼转转链接后台源码
    转转闲鱼交易猫三合一链接源码搭建教程:导入数据库,修改数据库config/conn.php1、一键生成链接卡框分享,效果逼真2、使用简单,支持自定义订单内容。3、输入相应内容,上传商品图片,快速生成链接一键分享转发下载源码:https://pan.baidu.com/s/1ytoKFN0gdcqJoJCh5Pvg6w?pwd=duke ......
  • 药品不良反应智能监测系统源码,ADR智能监测系统全套源码,
    ADR智能监测系统全套源码,药品不良反应智能监测系统源码ADR智能监测上报系统是基于医院临床数据中心而建立,运用信息技术实现药品不良反应的智能监测、报告管理、知识库查询、统计分析等功能。药品不良反应智能监测系统自动提取不良反应报告数据,主动实时监测临床发生的不良反应,第一时......
  • Apache Doris 聚合函数源码阅读与解析|源码解读系列
    笔者最近由于工作需要开始调研ApacheDoris,通过阅读聚合函数代码切入ApacheDoris内核,同时也秉承着开源的精神,开发了array_agg函数并贡献给社区。笔者通过这篇文章记录下对源码的一些理解,同时也方便后面的新人更快速地上手源码开发。聚合函数,顾名思义,即对一组数据执行聚合计算......
  • Java工地智慧云平台源码
    智慧工地云平台是一种基于云计算和物联网技术的解决方案,旨在提升工地管理的效率和安全性。它通过集成多种传感器、设备和软件系统,实现对工地各个环节的实时监控、数据采集和分析,从而实现对工地运营的全面管理和智能化决策。智慧工地利用移动互联、物联网、云计算、大数据等新一代......
  • 基于SpringBoot+Vue的流浪动物领养信息系统设计实现(源码+lw+部署文档+讲解等)
    (文章目录)前言:heartpulse:博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌:heartpulse:......
  • Spring MVC 源码分析 - ViewResolver 组件
    ViewResolver组件ViewResolver 组件,视图解析器,根据视图名和国际化,获得最终的视图View对象回顾先来回顾一下在 DispatcherServlet 中处理请求的过程中哪里使用到 ViewResolver 组件,可以回到《一个请求的旅行过程》中的 DispatcherServlet 的 render 方法中看看,如下:prote......
  • 构建高效学习平台:企业培训系统源码深度解析
    企业培训系统是组织中培养和提升员工技能的核心工具。本文将深入探讨企业培训系统的源码,通过关键技术代码解析,揭示其中的设计原理和功能实现,以构建更高效的学习平台。1.环境配置与依赖项安装首先,让我们关注源码的环境配置。以下是一个基本的PythonFlask应用,使用SQLite数据库:#app......
  • 源码开发实践:搭建企业培训APP的技术难题及解决方案
    在企业培训源码开发实践中,各位开发者可能遇到各种各样的问题,本文将深入探讨这些挑战,并提供解决方案,助力你顺利搭建企业培训APP。 1.多平台兼容性企业中员工使用的设备多种多样,包括iOS、Android等不同操作系统。在搭建培训APP时,如何实现多平台兼容性成为一项首要任务。解决方案是采......
  • 交易猫闲鱼链接源码跳转APP+八合一完整源码 转转闲鱼链接源码二手闲置源码
    高仿交易猫转转闲鱼源码搭建教程:添加网站→上传源码→解压源码→导入数据库→修改数据库路径config/Conn.php不用设置什么伪静态源码下载:转转闲鱼交易猫三合一链接源码搭建教程:导入数据库,修改数据库config/conn.php1、一键生成链接卡框分享,效果逼真2、使用简单,支持自定义订单内......