Pytorch框架中各文件的作用

news2024/11/25 14:44:56

新人在接触Pytorch以及深度学习等领域时,面对一个开源的代码可能无从下手,一个Pytorch框架相对比较负责,文件也多,其中的逻辑不免让初学者感到不知所措,下面大致梳理一下Pytorch各文件夹的作用和逻辑,其中的细节还是需要多实践才能了解

(1)Pytorch整体框架

如下图所示是一份Pytorch项目的框架

链接:https://github.com/chenyuntc/pytorch-best-practice

一份开源代码包含的文件(或者说框架)大致有如下几种

checkpoints: 保存训练模型

data:数据相关操作,比如数据集存放,数据处理函数的存放

models:模型定义,可以有多个模型

utils:可能用到的工具函数

config.py:配置文件,所有可配置的变量都集中在此,并提供默认值

main.py:主文件,训练和测试程序的入口,可通过不同的命令来指定不同的操作和参数

requirements.txt:程序依赖的第三方库

README.md:提供程序的必要说明

(2)Pytorch各文件夹详解

由于data和requirements.txt不复杂,这里就不展开介绍

<1>checkpoints

Checkpoint是用于描述在每次训练后保存模型参数(权重)的惯例或术语。这就像在游戏中保存关卡时你可以随时通过加载保存文件回复游戏。你可以加载保存的模型权重重新开启训练甚至可以之后进行一个推理。

我们经常会看到后缀名为.pt, .pth, .pkl的pytorch模型文件,这几种模型文件在格式上有什么区别吗?其实它们并不是在格式上有区别,只是后缀不同而已(仅此而已)

如上图所示,这是博主之前训练模型所保存的权重文件,一个完整的Pytorch模型文件,包含了如下参数:

  • model_state_dict:模型参数
  • optimizer_state_dict:优化器的状态
  • epoch:当前的训练轮数
  • loss:当前的损失值

不同模型权重保存的格式

weights一般是YOLO darknet的模型保存格式

pth一般是PyTorch的模型保存格式

ckpt一般是tenseflow的模型保存格式

<2>models

models这块根据项目的不同,存放的代码自然是不同的,总的来说就是存放训练数据的模型框架

如在sahi开源代码中https://github.com/obss/sahi/tree/deaed7ac02498c0f5839d7bc0ebd18b50e9f7019

就存放了很多模型,每一个模型对应一个文件

<3>utils

把一些常用的“小工具”类型的函数提取出来,独立存放在/utils文件夹,比如绘制图表的函数、文件写入读取函数等。

比如在下面的图中utils就封装了可视化工具

注意,由于不同实验之间共用 utils 函数,因此 utils 的更新应该是谨慎的,同时新版本函数的接口应该兼容旧版本的接口。

<4>config.py

在模型定义、数据处理和训练等过程都有很多变量,这些变量应提供默认值,并统一放置在配置文件中,这样在后期调试、修改代码或迁移程序时会比较方便,在这里我们将所有可配置项放在config.py中。

超参数应该使用config文件(json或者csv格式)保存,在实验中以dict或者class的形式传入。应该先设置一个基础的default版的config,具体实验中使用的自定义的config应该是在default版上的继承以及修改,并且自定义的config名字需要包含实验名。

超参数可以分为:

模型超参数:模型名称(自定义)、模型路径、模型描述(由模型自动根据参数生成)、模型备注(自定义)

模型应该能够根据输入的config参数,来生成对模型结构的描述,比如"模型种类+模型version参数"。

训练超参数:random_seed、batch_size、epoch_num、优化器种类、优化器参数、learning_rate

数据加载超参数:数据集名称、数据集路径、数据集描述(由data loader自动生成)、数据集备注(自定义)

<5>main.py

主文件,训练和测试程序的入口,可通过不同的命令来指定不同的操作和参数。这里不多做介绍

<6>README.md

GitHub 的 README.md 文档规范是指在 GitHub 上创建项目时,需要编写一个 README.md 文件来介绍项目的内容、使用方法、贡献者等信息。这个文件需要遵循一定的规范,包括使用 Markdown 语法、添加项目标题、描述、安装方法、使用示例、贡献者列表等内容。这样可以让其他用户更好地了解和使用你的项目,也方便你自己维护和更新项目。

关于markdown语法,本人博文作物计数方法之合并信息生成json标签的方法_追忆苔上雪的博客-CSDN博客中也有介绍,有兴趣的可以参考

<7>关于__init__.py

一个目录如果包含了__init__.py 文件,那么它就变成了一个包(package)。__init__.py可以为空,也可以定义包的属性和方法,但其必须存在,其它程序才能从这个目录中导入相应的模块或函数。例如在data/文件夹下有__init__.py,则在main.py 中就可以from data.dataset import DogCat。而如果在__init__.py中写入from .dataset import DogCat,则在main.py中就可以直接写为:from data import DogCat,或者import data; dataset = data.DogCat,相比于from data.dataset import DogCat更加便捷。

注意,package和文件夹在pycharm中标志是不一样的,package的标志用有个小圆圈

创建文件夹和package是有不同指令的

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

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

相关文章

基于 Orbit 的云原生应用交付基础原则与良好实践

本文作者&#xff1a;何文强——腾讯云 CODING 高级架构师。 负责 CODING DevOps产品解决方案架构设计和技术产品布道以及 CODING 云原生技术研究与落地实践。在多个技术大会担任演讲嘉宾&#xff0c;腾讯云 CODING DevOps 课程认证出品人&#xff0c;腾讯云云原生训练营核心初…

上市公司Git分支管理规范

Git分支管理策略 主分支Master 首先&#xff0c;代码库应该有一个、且仅有一个主分支。所有提供给用户使用的正式版本&#xff0c;都在这个主分支上发布。 Git主分支的名字&#xff0c;默认叫做Master。它是自动建立的&#xff0c;版本库初始化以后&#xff0c;默认就是在主…

ASEMI快恢复二极管MUR20100CT尺寸, MUR20100CT体积

编辑-Z MUR20100CT参数描述&#xff1a; 型号&#xff1a;MUR20100CT 最大峰值反向电压(VRRM)&#xff1a;1000V 最大RMS电压(VRMS)&#xff1a;700V 最大直流阻断电压(VDC)&#xff1a;1000V 平均整流正向电流(IF)&#xff1a;20A 非重复峰值浪涌电流(IFSM)&#xff1a…

Revit中墙体的问题,门窗洞口及柱断梁墙

一、如何同时开两道相邻墙的门窗洞口 做外墙装饰的时候&#xff0c;我们很经常为了方便、简洁在已经绘制好的墙体外围再绘制一面墙体&#xff0c;并且添加上材质作为外饰面&#xff0c;提高工作效率;但是遇到有门窗洞口的墙体时&#xff0c;外饰面墙体却没办法直接被门窗剪切&a…

LeetCode142.环形链表II

142.环形链表II 目录 142.环形链表II一、哈希表二、双指针 一、哈希表 和141题.判断链表是否有环类似&#xff0c;区别在于141题只要求判断链表中是否有环&#xff0c;该题则要求我们返回入环节点 一个非常直观的思路&#xff1a;遍历链表中的每个节点&#xff0c;并将它们记…

【论文】基于GANs的图像文字擦除 ——2010.EraseNet: End-to-End Text Removal in the Wild(已开源)

pytorch官方代码&#xff1a;https://github.com/lcy0604/EraseNet 论文&#xff1a;2010.EraseNet: End-to-End Text Removal in the Wild 网盘提取码&#xff1a;0719 一、图片文字去除效果 图10 SCUT-EnsText 真实数据集的去除 第一列原图带文字、第二列为去除后的标签&a…

【数据结构常见七大排序(三)上】—交换排序篇【冒泡排序】And【快速排序】

目录 前言 1.冒泡排序 1.1冒泡排序动图 1.2冒泡排序源代码 1.3冒泡排序的特性总结 2.快速排序&#x1f451; 2.1hoare版本实现思想 排序前 排序中 排序后 2.2hoare版本快排源代码 2.3分析先走 情况1&#x1f947; 情况2&#x1f948; 前言 交换类排序两个常见的排…

7月31日起,这类产品将禁止在亚马逊美国站销售!

亚马逊美国站发布公告称由于口腔胶带&#xff08;睡眠胶带&#xff09;在睡觉时存在潜在危险&#xff0c;出于对消费者的安全考虑&#xff0c;任何睡眠胶带产品的listing将在亚马逊商店下架&#xff0c;以下是公告内容&#xff1a; 自2023年7月31日起&#xff0c;口腔胶带&…

Docker 应用容器引擎

Docker 应用容器引擎 一、Docker是什么二、Docker安装和查看1、docker安装2、docker版本信息查看3、docker信息查看 三、镜像操作四、容器操作1、容器创建2、创建并启动容器3、容器的进入4、复制5、容器的导入和导出6、删除容器 一、Docker是什么 是一个开源的应用容器引擎&…

Java遍历集合方法分析(实现原理、算法性能、适用场合)

Java遍历集合方法分析&#xff08;实现原理、算法性能、适用场合&#xff09; 概述 java语言中&#xff0c;提供了一套数据集合框架&#xff0c;其中定义了一些诸如List、Set等抽象数据类型&#xff0c;每个抽象数据类型的各个具体实现&#xff0c;底层又采用了不同的实现方式…

56 # 实现 pipe 方法进行拷贝

pipe 是异步的&#xff0c;可以实现读一点写一点&#xff0c;管道的优势&#xff1a;不会淹没可用内存&#xff0c;但是在导入的过程中无法获取到内容 const fs require("fs"); const path require("path");fs.createReadStream(path.resolve(__dirname…

电脑记事本笔记误删如何找回?恢复删除的笔记方法

电脑上有很多好用的记事本软件。以Windows电脑为例&#xff0c;比较经典的有txt记事本&#xff0c;每个记事本可以单独的文件形式保存&#xff0c;误删某个记事本文件后可通过回收站找回&#xff0c;还原恢复。而如果正编辑笔记的时候误删了笔记&#xff0c;还未保存的情况下可…

2023 年第四次工业革命(工业4.0)指南

全球工业4.0市场在2019年估计为70亿美元&#xff0c;预计到2026年将达到210亿美元&#xff0c;因为越来越多的制造企业正在优化其数字化转型战略。工业4.0&#xff0c;也被称为第四次工业革命&#xff0c;旨在创建智能制造机器和系统&#xff0c;这些机器和系统经过连接&#x…

随手笔记——如何手写高斯牛顿法

随手笔记——如何手写高斯牛顿法 说明源代码 说明 将演示如何手写高斯牛顿法 源代码 #include <iostream> #include <chrono> #include <opencv2/opencv.hpp> #include <Eigen/Core> #include <Eigen/Dense>using namespace std; using names…

IIS 日志分析

Microsoft互联网信息服务&#xff08;IIS&#xff09;服务器&#xff0c;包括Web和FTP&#xff0c;已成为企业必不可少的。但是&#xff0c;IT 安全管理员的工作并不仅仅局限于部署 IIS 服务器。部署后&#xff0c;管理员必须采取安全措施来保护这些服务器。监视 IIS 服务器安全…

MacOS上安装Portainer

Portainer介绍 Portainer 是一个很方便的 Docker 可视化管理工具。主要的功能包括: 管理 Docker 主机,可以添加和删除 Docker 主机管理容器,可以启动、停止、删除等容器管理镜像,可以搜索、拉取、删除镜像管理卷,可以查看、删除卷管理网络,可以创建 Docker 网络管理用户和角色…

【Web安全】小白怎么快速挖到第一个漏洞,src漏洞挖掘经验分享,绝对干货!

src漏洞挖掘经验分享 – 掌控安全以恒 一、公益src 公益src是一个白帽子提交随机发现的漏洞的品台&#xff0c;我们可以把我们随机发现或者是主动寻找到的漏洞在漏洞盒子进行提交。 在挖掘src的时候不能越红线&#xff0c;一般情况下遇到SQL注入 只获取数据库名字以证明漏洞的…

蓝牙资讯|三星和日企合作开发智能戒指,将与苹果直接竞争

三星提交了一系列关于可穿戴设备的商标申请&#xff0c;其中包括与智能戒指有关的商标。近日有媒体爆出&#xff0c;三星已经开始与日本印刷电路板企业Meiko合作开发一款智能戒指。据称这款戒指可能会采用Galaxy品牌&#xff0c;或上周申请的智能戒指商标。 目前这一项目处于前…

对Element DatePicker时间组件的封装,时间组件开始时间和结束时间绑定

背景 我们时常有时间范围选择&#xff0c;需要选择一个开始时间和一个结束时间给后端&#xff0c;但我们给后端的是两个字段&#xff0c; 分别是开始时间和结束时间&#xff0c;现在使用element绑定的值是一个数组&#xff0c;我们还要来回处理&#xff0c;很麻烦列表也的查询…

Linux6.1 Docker 基本管理

文章目录 计算机系统5G云计算第四章 LINUX Docker 基本管理一、Docker 概述1.概述2.Docker与虚拟机的区别3.容器在内核中支持2种重要技术4.Docker核心概念1&#xff09;镜像2&#xff09;容器3&#xff09;仓库 二、安装 Docker三、Docker 镜像操作四、Docker 容器操作 计算机系…