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/93204314Python除了部分特殊符号之外都是对象,类同样是对象,为了便于理解,可以认为它们相比普通对象,多了可以被实例化的特点。所有的对象应该拥有基本属性__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),进而找到

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/611933.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python基础语法(上)——基本语法、顺序语句、判断语句、循环语句(有C++基础快速掌握Python语言)

文章目录 0.python小技巧与易错点1.python 与 c 语法有哪些区别2.Python基本语法2.1python的变量类型2.2python中的运算符2.3python中的表达式2.4python中的输入输出 3.python判断语句3.1基本用法:3.2关于else if 的用法3.3关于pass语句3.4python变量的作用域3.5pyt…

Java刷题错题笔记-day04-集合

1.在JDK8中,ConcurrentHashMap的数据结构是怎样的? 数组链表红黑树,和HashMap一样 Node数组: ConcurrentHashMap内部维护一个Node数组,其中每个Node就是键值对的存储单元。链表: 每个Node实际上是一个链表…

基于深度学习的果蔬检测识别系统(含UI界面、yolov5、Python代码、数据集)

项目介绍 项目中所用到的算法模型和数据集等信息如下: 算法模型:     yolov5 yolov5主要包含以下几种创新:         1. 添加注意力机制(SE、CBAM、CA等)         2. 修改可变形卷积(DySnake-主…

MySQL之导入以及导出远程备份v

目录 一.navact数据导入导出 1.1 导入 1.2 导出 二. mysqldump命令导入导出数据 2.1 导入 2.2 导出 三.load data file进行数据导入导出(只限于单表) 3.1 导入 3.2 导出 四.远程连接 好啦就到这里了哦!!!希望帮到你哦!!! 一.navact数据导入导…

CSS响应式布局

目录 rem单位 媒体查询 rem 媒体查询 rem适配方案(了解) 响应式布局总结 rem单位 1.设置文字大小的单位 px:设置为固定的css像素 em:相对于父元素字体的大小 %:相对于父元素字体的大小 rem:相对于…

CF1165E

洛谷题目链接 Codeforces题目链接 分析 如果只算区间 1 1 1 到 n n n 的话那么将 a a a 升序 b b b 降序排序即可。 我们发现 a i a_i ai​ 一共要乘 i ( n − i 1 ) i\times(n-i1) i(n−i1) 次,所以可以直接将 a i a_i ai​ 乘 i ( n − i 1 ) i\t…

申请企业通配符SSL证书流程

通配符SSL证书,又叫泛域名SSL证书,可以用一张SSL证书同时保护主域名以及主域名下的所有子域名。按照验证方式可以将通配符SSL证书分为DV通配符SSL证书和OV通配符SSL证书。其中OV通配符SSL证书只支持企事业单位申请,又称之为OV企业型通配符SSL…

初识MySQL:数据库相关概念,SQL语法以及DDL(数据库操作,表操作)

目录 1.数据库相关概念2.关系型数据库(RDBMS)3.SQL通用语法4.SQL分类5.DDL-数据库操作6.DDL-表操作1.查询表2.创建表3.数据类型1.数值类型2.字符串类型3.日期类型 4.修改表5.删除表 1.数据库相关概念 2.关系型数据库(RDBMS) 关系型…

ConcurrentHashMap的原理分析学习

ConcurrentHashMap 的初步使用及场景 CHM 的使用 ConcurrentHashMap 是 J.U.C 包里面提供的一个线程安全并且高效的 HashMap,所以ConcurrentHashMap 在并发编程的场景中使用的频率比较高,那么这一节课我们就从ConcurrentHashMap 的使用上以及源码层面来…

MVIT图像分类 学习笔记 (附代码)

论文地址:https://arxiv.org/pdf/2104.11227.pdf 代码地址:https://github.com/facebookresearch/SlowFast 1.是什么? MViT(Multiscale Vision Transformers)是一种多尺度视觉Transformer模型。它的关键概念是逐步增…

2023年全国职业院校技能大赛(高职组)“云计算应用”赛项赛卷⑤

2023年全国职业院校技能大赛(高职组) “云计算应用”赛项赛卷5 目录 需要竞赛软件包环境以及备赛资源可私信博主!!! 2023年全国职业院校技能大赛(高职组) “云计算应用”赛项赛卷5 模块一 …

Java学习笔记-day06-响应式编程Reactor与Callback、CompletableFuture三种形式异步编码对比

1. Reactor是什么 Reactor 是一个基于Reactive Streams规范的响应式编程框架。它提供了一组用于构建异步、事件驱动、响应式应用程序的工具和库。Reactor 的核心是 Flux(表示一个包含零到多个元素的异步序列)和 Mono表示一个包含零或一个元素的异步序列…

算法刷题常用方法

📑前言 本文主要是【java】——算法刷题常用方法的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与他 🌄每日一句&…

C语言程序设计考试掌握这些题妥妥拿绩点(写给即将C语言考试的小猿猴们)

目录 开篇说两句1. 水仙花数题目描述分析代码示例 2. 斐波那契数列题目描述分析代码示例 3. 猴子吃桃问题题目描述分析代码示例 4. 物体自由落地题目描述分析代码示例 5. 矩阵对角线元素之和题目描述分析代码示例 6. 求素数题目描述分析代码示例 7. 最大公约数和最小公倍数题目…

代码随想录算法训练营Day24|回溯算法理论基础、第77题. 组合

目录 回溯算法理论基础 理论基础 回溯法解决的问题 回溯法理解 回溯模板 第77题. 组合 前言 算法实现 剪枝优化 总结 回溯算法理论基础 理论基础 在二叉树中已经提到了回溯的概念,回溯是递归的副产品,也叫回溯搜索法,是一种搜索方…

linux磁盘清理_docker/overlay2爆满

问题:无意间发现linux服务器登陆有问题,使用df命令发现目录满了。 1. 确定哪里占用了大量内存。 cd / du -sh * | sort -rh经过一段时间后,显示如下: // 474G home // 230G var // 40G usr // 10G snap // --- 根据实际情…

C++_命令行操作

命令行操作 介绍第一步编译 源码第二部 找到exe 可执行文件第三步看图操作代码测试源码测试结果 介绍 本文介绍命令行操作 1.argc 表示当前输入 参数个数 2.argv 表示当前输入 字符串内容 第一步编译 源码 #include<iostream> #include<string>using namespace st…

Spring Security 6.x 系列(15)—— 会话管理之源码分析

一、前言 在上篇 Spring Security 6.x 系列(13)—— 会话管理之会话概念及常用配置 Spring Security 6.x 系列(14)—— 会话管理之会话固定攻击防护及Session共享 中了清晰了协议和会话的概念、对 Spring Security 中的常用会话配置进行了说明,并了解会话固定攻击防护…

React Native 桥接原生常量

一、编写并注册原生常量方法 在 SmallDaysAppModule 这个模块中有一个方法 getConstans &#xff0c;重载这个方法就可将自定义的常量返回&#xff0c;系统会自行调用该方法并返回定义的常量将其直接注入到 JS 层&#xff0c;在 JS 层直接获取即可。 二、JS 层获取原生常量&am…

el-table 个体行绑定点击事件时 表格中有el-radio和el-checkbox 点击触发两次事件处理方法

问题描述 在element的table中 使用radio或者checkbox 的单击事件,会导致radio或者checkbox的单击事件触发两次 解决办法 <el-table :data"tableData" style"width: 100%" max-height"500" :header-cell-style"tableHeaderCellStyle&q…