Pytorch项目的文件结构一般都是怎么组织的?

如果是从一些比较典型的论文里弄下来的源码,你会发现它们的论文结构往往都非常复杂。不同的模型、不同的论文,可能代码结构组织的方式都不一样。但它们都不外乎就是经历这几个方面:

1、模型和结构模块定义;

2、数据集获取与处理(类似于自定义数据集);

3、然后加载数据训练模型;

4、测试模型;

5、最后进行可视化处理。

顶多就是再加加配置、检查点、优化、日志之类的。

我们自己写代码也是这样写,别人的代码也是这样写,只不过别人的代码可能考虑的更加周到或者更加复杂,但是基本的框架肯定是不变的。

我的理解,不管是你自己去写,还是说你去理解别人的项目结构代码,你就都先去找核心的。像一些比较经典的模型,比如ResNet,ConvNext、AlexNet、Transformer等,你先找到核心的代码是什么,即先抓主要。什么是核心的呢?一般而言,核心的代码都是以model命名,或者就是以它这个模型的名字命名。比如ConvNet模型的代码结构中,核心代码就存储在models文件夹里的ConvNet.py中(当然,在models里面还有convnext_isotropic.py这样一个模型,它也是在论文中提到的模型的一种,和ConvNet.py的略有差别)。如下图所示:

这样,你如果从这一个文件中着手来去开始看的话,那么我相信你应该就能够看明白了。

在这些文件中都是对模型的定义的代码。然后一般情况下,它也会提供预训练的模型给你,这些预训练的模型你可以通过它给定的API接口去进行调用。

然后,在这些代码结束之后,它往往还会有dataset的代码(怎么命名看你自己);一般都是下载数据集的方式,然后将数据进行处理。就是说,在这部分代码里,它保存的是你的数据是如何处理的。如果你自己做项目,那么你可以把这些你肯定都是要有的吧。

再然后就是如何训练的。就是如何train的。

最后你还可以给出的test的效果。


我举两个例子,也是仅限于我的理解哈,不一定完全正确。

1、一个是ConvNet:

这个给的代码就比较详细了。如下图:

在models里面是它自个儿定义的模型。

然后再object_detection和semantic_detection这两个文件夹里面,看名字就知道,一个是用来做目标检测的,一个是用来做图像分割的。那如果你不关心这两个文件夹,你就不用管里面的架构是什么样的。如果你关心你可以再点进去看。、

看外面,dataset.py不用说,就是数据集的加载呀、处理呀等等那一堆儿。就好比我们自己写Demo时的自定义数据集那部分。

然后我看了下,它这里分的非常细,engine.py是训练一次的代码,里面一共就两个函数,你看函数名都知道它是在干嘛的了。

先说在optim_factory.py,真的是代码的功能如其名,这里面定义了许许多多的optimizer的方式,什么sgd呀,lr呀等等都在里面有定义,就是它的意思就是它为提供了很多种optimizer,然后根据你传进来的参数进行选择。它之所以写的这么细,好像是论文里有这么一种对照实验(不太确定,记不太清了)

至于在run_with_submitit.py中,看它的名字,它里面主要的内容应该是用“submitit”这个库进行提交和管理整个作业的。

至于utils.py,一般都放一些其他的函数结构。我个人的理解它有点像大杂烩的意思,或者就是为他人服务的,或者说是常用的接口文件。在这个项目里它主要是定义了运行时间进行记录和对比的函数,以及和日志有关的函数。

最后是main.py,它整个的代码就是在main里面跑的。我觉得main.py应该都不陌生,就是加载数据集、加载模型、跑模型、测试模型等等操作。因为刚刚在其他文件里,只是去给它定义了类的呀,还并未运行起来它。

不过有一说一,这个项目的代码确实很复杂了。


2、换个来说,这是clip的模型代码结构(第二个例子):

这个模型的代码构造感觉就比较简单了。emm所有的txt、ipynb和md文件都不用想,肯定是说明文件。这这里面,clip目录下的几个py文件,基本上就是整个模型的代码了。如果按照我们刚刚的来去思考,你点进去会发现,那个model.py是clip模型的定义部分;然后clip.py是用来给你下载并加载它的预训练模型用的。而simple_tokenizer.py主要定义了一些编码、encode/decode等操作。那个__init__.py文件里啥都没有(就是个空文件)。然后外层的hubconf.py是啥配置文件,但这个配置文件感觉怪怪的,openai给的解释是将PIL的图像转化为模型输入的维度,但是为什么放在这里,以及我觉得里面的代码也挺怪。然后setup.py就是安装这个clip的,如果你运行一下它,你会发现你的文件夹里又多了一个clip的项目哈哈(别问我是怎么知道的)


以上就是我对于文件结构的想法。也正是因为最近要整这一块的内容,所以把我的想法记录了下,也不一定对hhh,而且上面举的那两个模型我现在也还没有研究过(论文也还没看2333),也就是只看了眼代码的结构,所以有什么不对的地方欢迎批评指正(轻点喷....

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
PyTorch 项目中使用私有数据集的步骤如下: 1. 准备数据集:将数据集准备好,可以是图片、文本、视频等格式,并将其存储在本地文件夹中。确保数据集的文件格式和目录结构符合 PyTorch 的要求。 2. 自定义数据集类:根据数据集的格式和目录结构,使用 PyTorch 中的 Dataset 类自定义一个数据集类,继承 Dataset 类,并实现 __getitem__() 和 __len__() 方法。在 __getitem__() 方法中读取数据集中的每个样本,并对其进行处理,然后返回一个样本和标签。 3. 数据集预处理:对每个样本进行预处理,例如对图片进行缩放、裁剪、归一化等操作。可以使用 PyTorch 中的 transforms 模块来实现预处理。 4. 数据集划分:将整个数据集划分为训练集、验证集和测试集。可以使用 PyTorch 中的 SubsetRandomSampler 或 DataLoader 类来实现数据集的划分。 5. 加载数据集:使用 PyTorch 中的 DataLoader 类加载数据集,并设置 batch_size、shuffle 等参数。在训练模型时,每次从 DataLoader 中读取一个 batch 的数据,并将其送入模型进行训练。 6. 训练模型:使用 PyTorch 中的神经网络模块搭建模型,并使用 DataLoader 中的数据进行训练。在训练过程中,可以使用 PyTorch 中的优化器和损失函数来优化模型。 总结:以上是在 PyTorch 项目中使用私有数据集的步骤,需要对数据集进行预处理、划分和加载,并使用 DataLoader 进行训练。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jxwd

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值