PyTorch项目源码学习(2)——Tensor代码结构初步学习
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),进而找到


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

PyTorch项目源码学习(2)——Tensor代码结构初步学习的更多相关文章
- [阿里DIN] 深度兴趣网络源码分析 之 整体代码结构
[阿里DIN] 深度兴趣网络源码分析 之 整体代码结构 目录 [阿里DIN] 深度兴趣网络源码分析 之 整体代码结构 0x00 摘要 0x01 文件简介 0x02 总体架构 0x03 总体代码 0x0 ...
- Zepto源码分析之一(代码结构及初始化)
关于读源码,读jQuery自然是不错,但太过于庞大不易解读,对于小白,最好从Zepto,Lodash这样的小库入手. 这里使用的是zepto1.1.6版本为例. 自执行函数 在阅读之前,先弄清楚闭包和 ...
- Java项目源码为什么要做代码混淆(解释的很好)
代码混淆,是将计算机程序的代码转换成一种功能上等价,但是难于阅读和理解的形式的行为.代码混淆可以用于程序源代码,也可以用于程序编译而成的中间代码.执行代码混淆的程序被称作代码混淆器.目前已经存在许多种 ...
- 对于学习apache软件基金会顶级项目源码的一点思路(转)
ASF的开源项目,为软件行业贡献了太多好的产品和软件思维.学习ASF的项目源码能很大的提升自身的能力.程序运行在服务器上的流程:执行启动脚本(start.sh) -> 指向程序的主方法 -> ...
- MongoDB的使用学习之(七)MongoDB的聚合查询(两种方式)附项目源码
先来张在路上…… 铛铛铛……项目源码下载地址:http://files.cnblogs.com/ontheroad_lee/MongoDBDemo.rar 此项目是用Maven创建的,没有使用Mave ...
- 用Assert(断言)封装异常,让代码更优雅(附项目源码)
有关Assert断言大家并不陌生,我们在做单元测试的时候,看业务事务复合预期,我们可以通过断言来校验,断言常用的方法如下: public class Assert { /** * 结果 = 预期 则正 ...
- 最新app源码下载:200款优秀Android项目源码
200款优秀Android项目源码!菜鸟必备!Android开发又将带来新一轮热潮,很多开发者都投入到这个浪潮中去了,创造了许许多多相当优秀的应用.其中也有许许多多的开发者提供了应用开源项目,贡献出他 ...
- 反射实体自动生成EasyUi DataGrid模板 第二版--附项目源码
之前写过一篇文章,地址 http://www.cnblogs.com/Bond/p/3469798.html 大概说了下怎么通过反射来自动生成对应EasyUi datagrid的模板,然后贴了很多 ...
- WeMall微信商城源码活动报名插件代码详情
WeMall微信商城源码插件活动报名代码是用于商业推广的比较有效的方式,分享了部分比较重要的代码,供技术员学习参考,商家可自由设置报名项目,活动时间,报名内容 代码详情地址:http://addon. ...
- Java源码阅读的真实体会(一种学习思路)
Java源码阅读的真实体会(一种学习思路) 刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动. 源码阅读,我觉得最核心有三点:技术基础+强烈 ...
随机推荐
- Rethinking Point Cloud Registration as Masking and Reconstruction论文阅读
Rethinking Point Cloud Registration as Masking and Reconstruction 2023 ICCV *Guangyan Chen, Meiling ...
- vim vimtutor
=============================================================================== = 歡 迎 閱 ...
- gitlab ci 集成 eslint/prettier/tsc 做代码审查,并使用 eslint 输出作为显示代码质量
前言 想自动化一下公司里代码的部分审查,最初想用 reviewdog 的,但是公司的域名基本都在 VPN 中访问的,gitlab ci 的容器中是访问不到的,于是乎实验了 gitlab 代码质量功能. ...
- Required request body is missing缺失请求体
今天在写项目的时候前台传的参数后台一直接收不到,在网上搜了一些东西试了也没效果.后来发现是因为加了@RequestBody 去掉之后再次尝试就可以了.
- 可视化-vscode使用Plotly,绘制直方图
Plotly 是一款用来做数据分析和可视化的在线平台,功能非常强大,可以在线绘制很多图形比如条形图.散点图.饼图.直方图等等. 概述: plotly在python中绘图使用分三种:1.plotly.g ...
- STL 迭代器
工作之余看了一下<<accelerated c++>>这本书,挺有意思没,没有一大堆概念,直接就开始一步一步编写代码. 书中时不时会涉及到一些stl的概念,比如容器,算法,迭代 ...
- 飞码LowCode前端技术系列(一):数据结构设计
简介 飞码是京东科技研发的低代码产品,可使营销运营域下web页面快速搭建.飞码是单web页面搭建工具,从创建页面到监测再到投产的一站式解决方案.会通过七篇文章介绍飞码,分别是:(1)背景与数据结构设计 ...
- 一分钟了解 ChatGPT 语音对话
一.背景 近期 ChatGPT 推出新的语音和图像功能,可以与用户进行语音对话或基于用户上传的图像进行分析和对话,提供了一种新的.更直观的交互体验.用户可以更轻松地表达自己的需求.提出问题,并获得 C ...
- 实战|如何低成本训练一个可以超越 70B Llama2 的模型 Zephyr-7B
每一周,我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新,包括我们的产品和平台更新.社区活动.学习资源和内容更新.开源库和模型更新等,我们将其称之为「Hugging Ne ...
- 【数字图像处理】Matlab实现-图像增强-彩色图像增强(彩虹编码,热金属编码)
伪彩色处理 伪彩色增强:把一幅黑白域图像的不同灰度级映射为一幅彩色图像的技术手段. 伪彩色增强有很多种方法,而下面的增强方法则是使用的空间域灰度级-彩色变换法. 空间域灰度级-彩色变换法:可以将灰度图 ...