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

news2024/11/25 13:45:50

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

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

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

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

相关文章

【brpc学习实践九】mbvar及bvar可观测

概念、学习地址 mbvar中有两个类,分别是MVariable和MultiDimension,MVariable是多维度统计的基类,MultiDimension是派生模板类。也是主要用来多多线程计数用的。这里用到再详细去了解即可 https://github.com/luozesong/brpc/blob/master/do…

5.golang字符串的拆解和拼接

字符串是 Go 中的字节切片。可以通过将一组字符括在双引号中来创建字符串" "。Go 中的字符串是兼容Unicode编码的,并且是UTF-8编码的。 访问字符串的单个字节或字符 由于字符串是字节切片,因此可以访问字符串的每个字节。 func printStr(s …

知识的分层:know-what/how/why

知识(knowledge)表示知道某些信息。通常而言,知识是正确的,但不一定是完备的。知识本身有自己的适用范围,特别是工程技术类问题。 根据知识的类型,可分为三类: know-whatknow-howknow-why kno…

Redis 面试题——持久化

目录 1.概述1.1.Redis 的持久化功能是指什么?1.2.Redis 有哪些持久化机制? 2.RDB2.1.什么是 RDB 持久化?2.2.Redis 中使用什么命令来生成 RDB 快照文件?2.3.如何在 Redis 的配置文件中对 RDB 进行配置?2.4.✨RDB 持久化…

代码随想录算法训练营 ---第四十四天

今天开始《动态规划:完全背包》的学习! 前言: 完全背包和01背包的区别在于完全背包里的物品能无限次使用,01背包只能用一次。 第一题: 简介: 本题是纯完全背包的使用。可以看一看和01背包的区别。 代码…

手把手教你实现一个循环队列(C语言)

这是一道leetcode关于队列的经典题: 622. 设计循环队列https://leetcode.cn/problems/design-circular-queue/ 思路: 大家注意这个题目要求,这个队列是定长的,如果满了则不能再添加数据。那么我们设计一个队头front和队尾rear&…

单片机学习4——中断的概念

中断的概念: CPU在处理A事件的时候,发生了B事件,请求CPU迅速去处理。(中断产生) CPU暂时中断当前的工作,转去处理B事件。(中断响应和中断服务) 待CPU将B事件处理完毕后&#xff0…

Java王者荣耀小游戏

Background类 package LX;import java.awt.*; //背景类 public class Background extends GameObject{public Background(GameFrame gameFrame) {super(gameFrame);}Image bg Toolkit.getDefaultToolkit().getImage("C:\\Users\\ASUS\\Desktop\\王者荣耀图片\\Map.jpg&…

基于51单片机的音乐喷泉设计

**单片机设计介绍,基于51单片机的音乐喷泉设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于51单片机的音乐喷泉设计是一种将音乐和水喷射效果相结合的创意设计。下面是一个简要的设计介绍: 硬件设…

003、ArkTS开发实践

之——尝试 杂谈 学习声明式UI语法: 正文 1.声明式UI 1.1 声明式描述 想要什么样子就直接描述: 1.2 状态驱动视图更新 2.自定义组件 对页面内容进行合理抽象,组合基础组件,封装成自定义组件。 自定义子组件,为后续使…

Leetcode211. 添加与搜索单词 - 数据结构设计

Every day a Leetcode 题目来源:211. 添加与搜索单词 - 数据结构设计 解法1:字典树 字典树(前缀树)是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。前缀树可以用 O(∣S∣) 的时间复杂度完成如下操作…

【Vue】记事本

上一篇&#xff1a;Vue的指令 https://blog.csdn.net/m0_67930426/article/details/134599378?spm1001.2014.3001.5501 本篇所需指令&#xff1a; v- for v-model v-on v-show 目录 删除功能 添加功能 统计功能 清空功能 v-show 删除功能 <!DOCTYPE html> …

原生DOM事件、react16、17和Vue合成事件

目录 原生DOM事件 注册/绑定事件 DOM事件级别 DOM0&#xff1a;onclick传统注册&#xff1a; 唯一&#xff08;同元素的(不)同事件会覆盖&#xff09; 没有捕获和冒泡的&#xff0c;只有简单的事件绑定 DOM2&#xff1a;addEventListener监听注册&#xff1a;可添加多个…

编译原理词法分析器

算法描述 对于给出的源代码&#xff0c;我们按行将其读入&#xff0c;对于每一行单独进行词法分析。 过滤行前后空格对字符串进行词语的分割 有空格则把空格前的字符归为一个词比较上一个字符和当前字符是否需要进行分割 检查词语是否合法词语合法则按 [待测代码中的单词符号…

idea spring initializr创建项目报错

闲来无事就想搞个项目练练手&#xff0c;没想到直接给我卡在项目创建上了&#xff0c;一个个问题最终迎刃而解。 1.上来就给我报了个maven的错 未解析的插件: ‘org.apache.maven.plugins:maven-resources-plugin:3.3.1’ 不慌&#xff0c;应该是maven的路径有问题&#xff0c…

Ardupilot开源飞控之VTOL之旅:配件规格

Ardupilot开源飞控之VTOL之旅&#xff1a;配件规格 1. 源由2. 飞控板 Aocoda-RC H743Dual3. PDB分电板 Aocoda-RC PDB30604. GPS BN8805. 摄像头 RunCam 1200TVL6. 模拟图传 JHEMCU RuiBet Tran-3016W 5.8GHZ 1.6W7. 打印件7.1 飞控/GPS座子7.2 VTX/天线座子7.3 接收机天线座 8…

视频批量剪辑秘籍:批量AI智剪技巧,提升剪辑效率

在视频制作过程中&#xff0c;剪辑是一项重要的工作。然而&#xff0c;对于许多创作者来说&#xff0c;逐个剪辑视频会耗费大量的时间和精力。为了提高效率&#xff0c;批量剪辑成为了必要的手段。在进行批量剪辑之前&#xff0c;首先要明确自己的需求和素材。了解要剪辑的视频…

理解国外大佬用Web做出来跨窗口渲染动画效果

今天刷抖音看见国外一个大佬用Web做出来一个可以跨多浏览器窗口实时互动的渲染动画效果,觉得非常新奇,我就去看了一下源码,作者还写了一个非常好的例子帮助理解,我自己也仿写了作者的例子加深理解 **GitHub预览地址**麻烦帮忙点亮星星谢谢哈哈哈~ 整体思路是监听visibilityStat…

Windows系统下更新后自带的画图软件出现马赛克bug

一.bug的样子 在使用橡皮后&#xff0c;原来写的内容会变成马赛克。而我们希望它是纯白色的。 二.解决方法 第一步 第二步 第三步 三. 解决后的效果 用橡皮擦随便擦都不会出现马赛克了。 更新过后&#xff0c;想用win自带的画图软件会出现bug,希望微软大佬能够尽早解决bug。

QT基础开发笔记

用VS 写QT &#xff0c;设置exe图标的方法&#xff1a; 选定工程--》右键--》添加---》资源--》 QString 字符串用法总结说明 Qt QString 增、删、改、查、格式化等常用方法总结_qstring 格式化-CSDN博客 总结来说&#xff1a; QString 的 remove有两种用法&#xff0c;&am…