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),也就是只看了眼代码的结构,所以有什么不对的地方欢迎批评指正(轻点喷....

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

从源码重新真正认识RateLimiter(SmoothBursty实现)

前言 相信大家对于谷歌RateLimiter一定并不陌生,在项目中应该也经常拿来进行限流,但是对于其实现原理并不一定能用熟于心,本文带大家从源码探究RateLimiter的设计与具体实现。 RateLimiter的组成 从源码可以看到,RateLimiter由stopwatch与m…

Codeforces Round 911 (Div. 2)(C~E)(DFS、数论(容斥)、SCC缩点 + DAG图上DP)

​​​​​​1900C - Anjis Binary Tree 题意: 凯克西奇一直被安吉冷落。通过一个共同的朋友,他发现安吉非常喜欢二叉树,于是决定解决她的问题,以引起她的注意。Anji 给了 Keksic 一棵有 n个顶点的二叉树。顶点 1 是根&#xff…

[Spring] 字节一面~Spring 如何解决循环依赖问题 以及 @resource 与 @autowire 同时存在时谁生效

文章目录 Spring 如何解决循环依赖问题resource 与 autowire 同时存在时谁生效 Spring 如何解决循环依赖问题 Spring在实例化一个bean的时候,是首先递归实例化其所依赖的所有bean,直到某个bean没有依赖其他bean,此时就会将该实例返回&#x…

基于Java SSM框架+Vue实现大学生兼职信息网站项目【项目源码+论文说明】

基于java的SSM框架Vue实现大学生兼职信息网站演示 摘要 21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认…

【GD32307E-START】开发板开箱、开发环境建立及工程模板测试

01-GD32F307E-START开箱、开发环境建立及工程模板测试(Keil-MDK GCC Template) 兆易GD32307E-START开发板搭载GD32 ARM Cortex-M4微控制器主流芯片GD32F307。 开箱 板子的做工还是非常精良小巧的。有两颗按键,一颗是复位,一颗是…

时间序列预测 — LSTM实现单变量风电滚动预测(Keras)

目录 1 数据处理 1.1 数据集简介 1.2 数据集处理 2 模型训练与预测 2.1 模型训练 2.2 模型滚动预测 2.3 结果可视化 1 数据处理 1.1 数据集简介 实验数据集采用数据集5:风电机组运行数据集(下载链接),包括风速、风向、温…

纯新手发布鸿蒙的第一个java应用

第一个java开发鸿蒙应用 1.下载和安装华为自己的app开发软件DevEco Studio HUAWEI DevEco Studio和SDK下载和升级 | HarmonyOS开发者 2.打开IDE新建工程(当前用的IDEA 3.1.1 Release) 选择第一个,其他的默认只能用(API9)版本,…

居家适老化设计第三十二条---卫生间之扶手

以上产品图片均来源于淘宝 侵权联系删除 居家适老化中的扶手是指在家居环境中,为老年人提供支撑和帮助的装置,通常安装在家中的各个需要扶抓的位置,如楼梯、卫生间、浴室、厨房等处。扶手的设计应考虑老年人的体力、平衡和安全需求&#xf…

顶级Mac数据恢复工具—— 13个 Mac 数据恢复程序榜单

如果您点击此博客,首先可能是您不小心格式化了外部或内部存储,无论是 SD卡还是硬盘,其次,您收到了一些错误消息,表明您丢失了所有内容,现在您已经精疲力竭了的形状。原因可能有多种:您不小心删除…

探索 Linux vim/vi 编辑器:介绍、模式以及基本操作演示

💐作者:insist-- 💐个人主页:insist-- 的个人主页 理想主义的花,最终会盛开在浪漫主义的土壤里,我们的热情永远不会熄灭,在现实平凡中,我们终将上岸,阳光万里 ❤️欢迎点…

Slf4j使用Logback时,Logback如何初始化

前言 Slf4j SLF4J,全称 Simple Logging Facade for Java,是一个用于Java编程语言的日志系统抽象层。它为多种现有日志框架(例如Log4j、java.util.logging等)提供了统一的接口, 但自身并不实现日志功能。 SLF4J 允许用户在部署时…

校园导游程序及通信线路设计(结尾附着总源码)

校园导游程序及通信线路设计 摘  要 新生或来访客人刚到校园,对校园的环境不熟悉。就需要一个导游介绍景点,推荐到下一个景点的最佳路径等。随着科技的发展,社会的进步,人们对便捷的追求也越来越高。为了减少人力和时间。针对对…

一起学docker系列之十一使用 Docker 安装 Redis 并配置持久化存储

目录 前言1 基本安装步骤安装Redis镜像:查看已下载的Redis镜像:运行Redis容器:进入Redis容器:使用Redis CLI进行基本操作: 2 配置文件同步准备配置文件:修改Redis配置文件 /app/redis/redis.conf&#xff1…

Project DESFT 白皮书中文版——应用于普惠金融的可信数字凭证解决方案

1. 概述 Project DESFT 是由 Solv 基金会与 zCloak Network 联合设计孵化,以跨境贸易和金融服务为场景的分布式可信数字凭证解决方案(Distributed Trusted Digital Credential Solution),项目获得新加坡金管局(Monetar…

项目实战——苍穹外卖(DAY10)

如果之前有改过端口号造成WebSocket无法连接的,可以看本篇文章“来单提醒”前的内容进行解决。 课程内容 Spring Task 订单状态定时处理 WebSocket 来单提醒 客户催单 功能实现:订单状态定时处理、来单提醒和客户催单 订单状态定时处理&#xff1a…

Python---练习:使用Python函数编写通讯录系统

预览通讯录系统最终效果 首先,进行需求分析,整个系统功能,分为6个板块,功能如下: ① 添加学员信息 ② 删除学员信息 ③ 修改学员信息 ④ 查询学员信息 ⑤ 遍历所有学员信息 ⑥ 退出系统 系统共6个功能&#xff…

drool 7 multiThread 测试

基本信息 通过option ,使用如下代码进行设置 //线程数量10MaxThreadsOption optionMaxThreadsOption.get(10);kieBaseConf.setOption(option);kieBaseConf.setOption(MultithreadEvaluationOption.YES);并发是以CompositeDefaultAgenda/Rule为颗粒度来的&#xff0…

国企央企降薪20%,年终奖也没了。

* 你好,我是前端队长,在职场,玩副业,文末有福利! 精彩回顾:京东内部员工,爆料工资与公积金收入! 最近,很多国企央企也开始降薪了,有的甚至降幅达到 21%&#…

针对操作系统漏洞的反馈方法

一、针对操作系统漏洞的反馈方法 漏洞扫描指基于漏洞数据库,通过扫描等手段对指定的远程或者本地计算机系统的安全脆弱性进行检测,发现可利用漏洞的一种安全检测(渗透攻击)行为。在进行漏洞扫描后,需先确定哪些是业务…

2023年亚太杯数学建模C题新能源汽车成品文章(思路模型代码成品)

一、翻译 新能源汽车是指采用先进的技术原理、新技术和新结构,以非常规车用燃料(非常规车用燃料是指汽油和柴油以外的燃料(非常规车用燃料是指汽油和柴油以外的燃料),并集成了汽车动力控制和驱动等先进技术的汽车。新能源汽车包括…