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

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

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

相关文章

Mybatis反射核心类Reflector

Reflector类负责对一个类进行反射解析&#xff0c;并将解析后的结果在属性中存储起来。 一个类反射解析后都有哪些属性呢&#xff1f;我们可以通过Reflector类定义的属性来查看 public class Reflector {// 要被反射解析的类private final Class<?> type;// 可读属性列…

带你用uniapp从零开发一个仿小米商场_6. 配置uniapp项目底部导航栏tabbar

uniapp底部tabbar介绍 在uni-app中&#xff0c;底部tabbar是一种常见的导航方式&#xff0c;它可以让用户在应用的不同页面之间进行切换。通过tabBar配置项&#xff0c;开发者可以指定一级导航栏和tab切换时显示的对应页。 在底部tabbar中&#xff0c;每个tab都有一个页面路径…

虹科分享 | AR世界揭秘:从二维码的起源到数据识别与位姿技术的奇妙融合!

引言&#xff1a;探索AR的神奇世界&#xff0c;我们将从二维码的诞生谈起。在这个科技的海洋中&#xff0c;二维码是如何帮助AR实现数据获取与位姿识别的呢&#xff1f;让我们一起揭开这层神秘的面纱&#xff01; 一、二维码的由来 二维码是将数据存储在图形中的技术&#xff…

Python | CAP - 累积精度曲线分析案例

CAP通常被称为“累积精度曲线”&#xff0c;用于分类模型的性能评估。它有助于我们理解和总结分类模型的鲁棒性。为了直观地显示这一点&#xff0c;我们在图中绘制了三条不同的曲线&#xff1a; 一个随机的曲线&#xff08;random&#xff09;通过使用随机森林分类器获得的曲线…

Gee教程1.HTTP基础

标准库启动web服务 Go语言内置了 net/http库&#xff0c;封装了HTTP网络编程的基础的接口。这个Web 框架便是基于net/http的。我们先回顾下这个库的使用。 package mainimport ("fmt""log""net/http" )func main() {//可以写成匿名函数(lambda…

【数据结构初阶】树,二叉树

树&#xff0c;二叉树 1.树概念及结构1.1树的概念1.2 树的相关概念1.3 树的表示1.4 树在实际中的运用&#xff08;表示文件系统的目录树结构&#xff09; 2.二叉树概念及结构2.1概念2.2现实中的二叉树2.3 特殊的二叉树2.4 二叉树的性质2.5 二叉树的存储结构 1.树概念及结构 1.…

STM32-SPI3控制MCP3201、MCP3202(Sigma-Delta-ADC芯片)

STM32-SPI3控制MCP3201、MCP3202&#xff08;Sigma-Delta-ADC芯片&#xff09; 原理图手册说明功能方框图引脚功能数字输出编码与实值的转换分辨率设置与LSB最小和最大输出代码&#xff08;注&#xff09; 正负符号寄存器位MSB数字输出编码数据转换的LSB值 将设备输出编码转换为…

SQL JOIN 子句:合并多个表中相关行的完整指南

SQL JOIN JOIN子句用于基于它们之间的相关列合并来自两个或更多表的行。 让我们看一下“Orders”表的一部分选择&#xff1a; OrderIDCustomerIDOrderDate1030821996-09-1810309371996-09-1910310771996-09-20 然后&#xff0c;看一下“Customers”表的一部分选择&#xff…

单片机学习5——外部中断程序

#include<reg52.h>unsigned char a; sbit lcden P3^4;void main() {lcden0;EA1;EX01;IT00;a0xF0; //点亮4位小灯while(1){P1a;} }//中断服务程序 void ext0() interrupt 0 // 0 表示的是外部中断源0 {a0x0f; // 中断处理完&#xff0c;再返回主…

2018年10月4日 Go生态洞察:参与2018年Go公司问卷调查

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

系列十八、Spring bean线程安全问题

一、概述 我们知道Spring中的bean&#xff0c;默认情况下是单例的&#xff0c;那么Spring中的bean是线程安全的吗&#xff1f;这个需要分情况考虑&#xff0c;bean中是否存在成员变量&#xff1f;bean中的成员变量是怎么处理的&#xff1f;...&#xff0c;针对bean的状态会有不…

【C++】类和对象——拷贝构造和赋值运算符重载

上一篇我们讲了构造函数&#xff0c;就是对象实例化时会自动调用&#xff0c;那么&#xff0c;我们这里的拷贝构造在形式上是构造函数的一个重载&#xff0c;拷贝构造其实也是一种构造函数&#xff0c;那么我们就可以引出这里的规则 1.拷贝构造函数的函数名必须与类名相同。 2.…

数据结构——带头循环双向链表(List)

1、带头双向循环链表介绍 在上一篇博客中我们提到了链表有三个特性&#xff0c;可以组合成为8种不同类型的链表。单链表是其中比较重要的一种&#xff0c;那么这次我们选择和带头双向循环链表会会面&#xff0c;这样我们就见识过了所有三种特性的呈现。 带头双向循环链表&#…

HONOR荣耀MagicBook 15 2021款 锐龙版R5(BMH-WFQ9HN)原厂Windows11预装OEM系统含F10智能还原

链接&#xff1a;https://pan.baidu.com/s/1faYtC5BIDC2lsV_JSMI96A?pwdj302 提取码&#xff1a;j302 原厂系统Windows11.22H2工厂模式安装包,含F10一键智能还原&#xff0c;自带所有驱动、出厂主题壁纸、系统属性专属LOGO标志、Office办公软件、荣耀 电脑管家等预装程序 …

process control 化学工程 需要用到MATLAB的Simulink功能

process control 化学工程 需要用到MATLAB的Simulink功能 所有问题需要的matlab simulink 模型 WeChat: ye1-6688 The riser tube brings in contact the recirculating catalyst with the feed oil, which then vaporizes and splits to lighter components as it flows up th…

服务器下db(数据库)的执行

1、查看 select * from xxxx&#xff08;表名&#xff09; where xxx&#xff08;列表&#xff09;1 and.......正常写就行 2、插入 如果你想要在 SELECT INSERT INTO … SELECT 语句中将部分列保持不变,只改变一两列的值,可以在 语句中直接设置目标列的值,而其他列从源表中…

【C++】类型转换 ③ ( 重新解释类型转换 reinterpret_cast | 指针类型数据转换 )

文章目录 一、重新解释类型转换 reinterpret_cast1、指针数据类型转换 - C 语言隐式类型转换报错 ( 转换失败 )2、指针数据类型转换 - C 语言显示类型强制转换 ( 转换成功 )3、指针数据类型转换 - C 静态类型转换 static_cast ( 转换失败 )4、指针数据类型转换 - C 重新解释类型…

Simulink 的代数环

代数环, 就是由于模型的输出反馈到模块或子系统先的某个输入端, 如果这个输入是直接馈入的, 那么二者在同一个采样点内需得到求解, 但又互相依赖, 哪一方都不能完成求解过程, 使得解算器无法解算导致错误产生, 这样的情况称为代数环。 一旦 Simulink 遇到代数环, 将根据 Confi…

python环境搭建-yolo代码跑通-呕心沥血制作(告别报错no module named torch)

安装软件 安装过的可以查看有没有添加环境变量 好的! 我们发车! 如果你想方便快捷的跑通大型项目,那么必须安装以下两个软件: 1.pycharm2.anaconda对应作用: pycharm:专门用来跑通python项目的软件,相当于一个编辑器,可以debug调试,可以接受远程链接调试!anaconda:专…

2023年初中生古诗文大会复选最后6天备考策略和更新的在线模拟题

今天是2023年11月26日&#xff0c;星期日&#xff0c;距离2023年第八届上海市中学生古诗文大会复选&#xff08;复赛&#xff09;还有六天&#xff08;2023年12月2日上午举办&#xff09;&#xff0c;相信各位晋级的小学霸们正在繁忙的学业之余抓紧备考。 为了帮助孩子们更有效…