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),进而找到

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

相关推荐

  1. PyTorch项目学习(1)

    2024-01-10 22:32:02       60 阅读
  2. Pytorch Tensor 维度变换学习记录

    2024-01-10 22:32:02       59 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-10 22:32:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-10 22:32:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-10 22:32:02       87 阅读
  4. Python语言-面向对象

    2024-01-10 22:32:02       96 阅读

热门阅读

  1. css less sass 动态宽高

    2024-01-10 22:32:02       55 阅读
  2. Ddos攻击防御之使用nginx

    2024-01-10 22:32:02       57 阅读
  3. Centos 7 安装Nginx

    2024-01-10 22:32:02       58 阅读
  4. python 元组

    2024-01-10 22:32:02       58 阅读
  5. SQL注入攻击和防御

    2024-01-10 22:32:02       60 阅读
  6. Spring MVC中的重定向和转发!!!

    2024-01-10 22:32:02       53 阅读
  7. Vue3-40-路由- 动态路由

    2024-01-10 22:32:02       49 阅读
  8. 2024年1月11日 晨会汇报

    2024-01-10 22:32:02       52 阅读
  9. mysql常见问题

    2024-01-10 22:32:02       49 阅读
  10. 向爬虫而生---Redis 拓宽篇3 <GEO模块>

    2024-01-10 22:32:02       52 阅读