Pytorch文件夹结构
_pycache_ 缓存
该文件夹存放python解释器生成的字节码,后缀通常为pyc/pyo。其目的是通过牺牲一定的存储空间来提高加载速度,对应的模块直接读取pyc文件,而不需再次将.py语言转换为字节码的过程,从此节省了时间。
从文件夹名称可知,它是一个缓存,如果需要,我们当然可以删掉它。
_C 封装起来的C++
从文件夹名称就知道它和C语言有关,其实它是辅助C语言代码调用的一个模块,该文件夹里存放了一系列pyi文件,pyi文件是python用来校验数据类型的,如果调用数据类型不规范,会报错。
PyTorch的底层计算代码采用的是C++语言编写,并封装成库,供pytorch的python语言进行调用。这一点非常重要,后续我们会发现一些pytorch函数无法跳转到具体实现,这是因为具体的实现通过C++语言。
include C++的头文件
上面讲到pytorch许多底层运算用的是C++代码,那么C++代码在哪里呢? 它们在这里,在torch/csrc文件夹下可以看到各个.h/.hpp文件,而在python库中,只包含头文件,这些头文件就在include文件夹下。
lib 链接库
torch文件夹中最重要的一个模块,torch文件夹占3.2GB的空间,98%的内容都在lib中,占了3.16GB空间。
lib文件夹下包含大量的.lib .dll文件(分别是静态链接库和动态链接库),例如大名鼎鼎的cudnn64_7.dll(占435MB), torch_cuda.dll(940MB)。这些底层库都会被各类顶层python api调用。
autograd 梯度自动求导
该模块是pytorch的核心模块与概念,它实现了梯度的自动求导,极大地简化了深度学习研究者开发的工作量,开发人员只需编写前向传播代码,反向传播部分由autograd自动实现,再也不用手动去推导数学公式,然后编写代码了。
nn 网络层?暂时不理解
相信这个模块是99%pytorch开发者使用频率最高的模块,搭建网络的网络层就在nn.modules里边。
onnx 不理解,后续补充
pytorch模型转换到onnx模型表示的核心模块,进入文件夹可以看到大量的opset**.py。
optim 优化模块
优化模块,深度学习的学习过程,就是不断的优化,而优化使用的方法函数,都暗藏在了optim文件夹中,进入该文件夹,可以看到熟悉的优化方法:“Adam”、“SGD”、“ASGD”等。以及非常重要的学习率调整模块,lr_scheduler.py。、
utils 工具?
utils是各种软件工程中常见的文件夹,其中包含了各类常用工具,其中比较关键的是data文件夹,tensorboard文件夹,这些工具都将在后续章节详细展开。
torchvision模块
datasets 数据读取函数
这里是官方为常用的数据集写的数据读取函数,例如常见的cifar, coco, mnist,svhn,voc都是有对应的函数支持,可以方便地使用轮子,同时也可以学习大牛们是如何写dataset的。
models 视觉模型库,暂时应该用不上
这里是宝藏库,里边存放了经典的、可复现的、有训练权重参数可下载的视觉模型,例如分类的alexnet、densenet、efficientnet、mobilenet-v1/2/3、resnet等,分割模型、检测模型、视频任务模型、量化模型。这个库中的模型实现,也是大家可以借鉴学习的好资料,可以模仿它们的代码结构、函数、类的组织。
ops 视觉任务特殊功能函数?
视觉任务特殊的功能函数,例如检测中用到的 roi_align, roi_pool,boxes的生成,以及focal_loss实现,都在这里边有实现。
transforms 视觉数据增强库
数据增强库,相信99%的初学者用到的第一个视觉数据增强库就是transforms了,transforms是pytorch自带的图像预处理、增强、转换工具,可以满足日常的需求。但无法满足各类复杂场景,因此后续会介绍更强大的、更通用的、使用人数更多的数据增强库——Albumentations。
参考:https://tingsongyu.github.io/PyTorch-Tutorial-2nd/chapter-2/2.1-module-tree.html