深度学习训练中常用的三个基础库tqdmargparseyaml

文章目录

  • 训练常用工具[tqdm][argparse][yaml]
    • tqdm
      • 1. 导入tqdm
      • 2. 传入可迭代对象
        • 快速使用
        • 进阶1:通过`update()`自定义进度条每次更新的步长
        • 进阶2:通过set_description和set_postfix自定义进度条内容
    • Argparse
      • 第一步:创建ArgumentParser对象
      • 第二步:**给ArgumentParser对象添加参数,add_argument函数是核心!!**
      • 第三步:解析得到参数
    • Yaml
      • yaml基本语法
      • 数据类型
        • 字面量:单个的,不可再分的值。
        • 对象:键值对的组合
        • 数组:一组按次序排列的值
      • 第一步:基于yaml的语法编写yaml文件
      • 第二步:读取yaml文件内容
      • 第三步:有时候我们也可以保存参数到yaml文件中

训练常用工具[tqdm][argparse][yaml]

tqdm

1. 导入tqdm

from tqdm import * 

2. 传入可迭代对象

快速使用
import time
for i in tqdm(range(100)):time.sleep(0.01)
100%|██████████| 100/100 [00:01<00:00, 98.07it/s]

使用trange(100)简写tqdm(range(100))

for i in trange(100):time.sleep(0.01)
进阶1:通过update()自定义进度条每次更新的步长
with tqdm(total=200) as pbar:for i in range(20):  # 总共更新 20 次pbar.update(10)  # 每次更新步长为 10time.sleep(1)
  • with tqdm(total=200) as pbar::这行代码初始化了一个进度条对象pbar,设定总进度(total)为200。这里的total=200表示整个进度条代表的操作总量是200个单位。
  • for i in range(20)::设置一个循环,总共迭代20次。这表示我们计划通过20次迭代来完成总进度。
  • pbar.update(10):在每次循环中,调用pbarupdate方法来更新进度条。参数10表示每次循环我们完成了总任务的10个单位。由于总任务量是200个单位,而我们每次更新10个单位,因此需要更新20次才能达到总进度,这与range(20)设置的迭代次数相吻合。

中点在于每次迭代时,通过update(10)更新进度条的内容

如果只循环10次,最终只会在进度条为100/200时停止。

image-20240401173641194

进阶2:通过set_description和set_postfix自定义进度条内容
pbar = tqdm(total=100)
for i in range(10):time.sleep(0.1)  # 模拟你的任务pbar.set_description("Epoch{}".format(i))# 显示进度条左部的内容pbar.set_postfix(batch=i, loss=0.1*i, accuracy=0.95-0.01*i, refresh=False)# 更新后缀信息以反映更多细节pbar.update(10)pbar.close()

进度条被设置了描述“Epoch i”,同时每次循环更新时,后缀显示了当前批次(batch)、损失(loss)和准确度(accuracy)。注意refresh=False参数可以用来减少更新频率,以避免在某些情况下的性能问题。

Epoch9: 100%|██████████| 100/100 [00:01<00:00, 97.32it/s, accuracy=0.86, batch=9, loss=0.9]

Argparse

通过argparse库,能够在命令行中设置python文件的启动参数,同时根据获取的参数配置python文件中的对应部分。

第一步:创建ArgumentParser对象

parser = argparse.ArgumentParser("This is a Arg Parser!!")

第二步:给ArgumentParser对象添加参数,add_argument函数是核心!!

可以通过–help或者-h首先看看一个含有ArgumentParser对象的程序的提示信息:使用yolov5做例子

python train.py -h
usage: train.py [-h] [--weights WEIGHTS] [--cfg CFG] [--data DATA] [--hyp HYP] [--epochs EPOCHS] [--batch-size BATCH_SIZE] [--imgsz IMGSZ] [--rect] [--resume [RESUME]] [--nosave][--noval] [--noautoanchor] [--noplots] [--evolve [EVOLVE]] [--bucket BUCKET] [--cache [CACHE]] [--image-weights] [--device DEVICE] [--multi-scale] [--single-cls][--optimizer {SGD,Adam,AdamW}] [--sync-bn] [--workers WORKERS] [--project PROJECT] [--name NAME] [--exist-ok] [--quad] [--cos-lr][--label-smoothing LABEL_SMOOTHING] [--patience PATIENCE] [--freeze FREEZE [FREEZE ...]] [--save-period SAVE_PERIOD] [--seed SEED] [--local_rank LOCAL_RANK][--entity ENTITY] [--upload_dataset [UPLOAD_DATASET]] [--bbox_interval BBOX_INTERVAL] [--artifact_alias ARTIFACT_ALIAS]optional arguments:-h, --help            show this help message and exit--weights WEIGHTS     initial weights path--cfg CFG             model.yaml path--data DATA           dataset.yaml path--hyp HYP             hyperparameters path--epochs EPOCHS       total training epochs--batch-size BATCH_SIZEtotal batch size for all GPUs, -1 for autobatch--imgsz IMGSZ, --img IMGSZ, --img-size IMGSZtrain, val image size (pixels)--rect                rectangular training--resume [RESUME]     resume most recent training--nosave              only save final checkpoint--noval               only validate final epoch--noautoanchor        disable AutoAnchor--noplots             save no plot files--evolve [EVOLVE]     evolve hyperparameters for x generations--bucket BUCKET       gsutil bucket--cache [CACHE]       image --cache ram/disk--image-weights       use weighted image selection for training--device DEVICE       cuda device, i.e. 0 or 0,1,2,3 or cpu--multi-scale         vary img-size +/- 50%--single-cls          train multi-class data as single-class--optimizer {SGD,Adam,AdamW}optimizer--sync-bn             use SyncBatchNorm, only available in DDP mode--workers WORKERS     max dataloader workers (per RANK in DDP mode)--project PROJECT     save to project/name--name NAME           save to project/name--exist-ok            existing project/name ok, do not increment--quad                quad dataloader--cos-lr              cosine LR scheduler--label-smoothing LABEL_SMOOTHINGLabel smoothing epsilon--patience PATIENCE   EarlyStopping patience (epochs without improvement)--freeze FREEZE [FREEZE ...]Freeze layers: backbone=10, first3=0 1 2--save-period SAVE_PERIODSave checkpoint every x epochs (disabled if < 1)--seed SEED           Global training seed--local_rank LOCAL_RANKAutomatic DDP Multi-GPU argument, do not modify--entity ENTITY       Entity--upload_dataset [UPLOAD_DATASET]Upload data, "val" option--bbox_interval BBOX_INTERVALSet bounding-box image logging interval--artifact_alias ARTIFACT_ALIASVersion of dataset artifact to use

可以发现这些参数都是optional arguments,也就是关键字参数,当然还有位置参数,这个现在基本不用了;

主要写法:

parser.add_argument("--参数名","-参数名简写",type = ,default =默认值 ,action = ,help = "参数描述信息")

参数名:由--或者-开头,表示可选参数,类似关键字参数,在命令行中可以不用指出;其他的都是位置参数,必须指出,且必须位置对应。例如--output,-o

type:指明参数的类型,int/float/bool/str/list/dict

default:参数的默认值设置

action:两个store_true或者store_false

  • store_true,当参数列表中出现了对应的参数,那么就会设置为True
  • store_false,当参数列表中出现了对应的参数,那么就会设置为False
  • 注意,指定了action的参数,不能在后面加上任何内容,否则会报错

help:参数的描述信息,在运行-h时会指出所有参数的描述信息,帮助理解。

目前的用法就是这些,具体其他用法可以参考文档:argparse 教程 — Python 3.12.2 文档。

或者参考其他教程:argparse模块用法实例详解 - 知乎 (zhihu.com)

第三步:解析得到参数

args = parser.parse_args()

解析得到的参数会被存储在一个由argparse生成的Namespace对象中。这个对象将命令行指定的每个参数作为一个属性,属性名与你在添加参数时使用的字符串相对应(去掉了前面的--)。如果参数未在命令行中提供,那么它将使用在add_argument函数中指定的默认值。

python your_script.py --weights yolov5s.pt --imgsz 320 --rect --device 0

解析得到的对象:

Namespace(weights='yolov5s.pt', cfg='', data='data/coco128.yaml', hyp='data/hyps/hyp.scratch-low.yaml', epochs=100, batch_size=16, imgsz=320, rect=True, resume=False, nosave=False, noval=False, noautoanchor=False, noplots=False, evolve=None, bucket='', cache=None, image_weights=False, device='0', multi_scale=False, single_cls=False, optimizer='SGD', sync_bn=False, workers=8, project='runs/train', name='exp', exist_ok=False, quad=False, cos_lr=False, label_smoothing=0.0, patience=100, freeze=[0], save_period=-1, seed=0, local_rank=-1, entity=None, upload_dataset=False, bbox_interval=-1, artifact_alias='latest')

如何获取参数呢?

直接通过.获取args中的属性:

args.epochs

args.batch_size

Yaml

yaml全称Yeah Another Markup Language.(仍是一种标记语言)。他非常适合用来做以数据为中心的配置文件

使用yaml目的:复杂代码可以实现仅修改yaml文件,重新运行打开yaml文件的python命令后参数就可以更新。不需要在python文件中找需要修改的参数位置。这个对于配置模型训练的超参数很有用!!

yaml基本语法

  1. 键值对。key: value。(冒号:后边要接一个空格)
  2. 大小写敏感
  3. 用缩进表示层级关系
  4. 缩进不允许使用tab,只允许空格
  5. 用#表示注释
  6. 单引号‘’与双引号“”表示字符串内容,其中单引号中的内容不会被转义,双引号中的内容会被转义:
    • 如果是在单引号中用\n,那么,会直接输出\n
    • 如果是在双引号中用\n,那么,会输出换行

数据类型

字面量:单个的,不可再分的值。

例如:date、boolean、string、number、null

key: value
对象:键值对的组合

例如map、hash、set、object

key: {key1: value1,key2: value2,key3: value3}

或者用

key:key1: value1key2: value2key3: value3
数组:一组按次序排列的值

例如:array、list、queue

key: [value1, value2, value3]

或者用

key:- value1- value2- value3 

语法参考文档:

python使用yaml模块_python get_yaml_data-CSDN博客

Python使用第三方库之【yaml】_yaml 是paython的一个什么库-CSDN博客

第一步:基于yaml的语法编写yaml文件

例如config.yml:

nb:user: adminpsw: 123456

第二步:读取yaml文件内容

  • 使用open直接打开读取
# 用open方法打开直接读取
f = open(ymlPath, 'r')
cfg = f.read()
print(type(cfg)) # 读取的结果是 字符串
print(cfg)
  • 使用load方法转换成字典
d = yaml.load(cfg) # 用load方法转字典
print(d)
print(type(d))

第三步:有时候我们也可以保存参数到yaml文件中

使用dump(),将一个Python对象生成为一个yaml文档

a = {'name': 'Jack','race': 'Human','traits': ['Two_Hand', 'Two_Eye']
}
ret = yaml.dump(a)
print(ret)
print(type(ret))

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

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

相关文章

机器学习在智能音箱中的应用探索与实践:让声音更懂你

&#x1f9d1; 作者简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向的学习指导…

在Compose中方便的使用MVI思想?试试useReducer!

写在前面 本文中提及的use开头的函数&#xff0c;都出自与我的 ComposeHooks 项目&#xff0c;它提供了一系列 React Hooks 风格的状态封装函数&#xff0c;可以帮你更好的使用 Compose&#xff0c;无需关系复杂的状态管理&#xff0c;专心于业务与UI组件。 这是系列文章的第…

2024 ccfcsp认证打卡 2023 03 01 田地丈量

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in new Scanner(System.in);int n in.nextInt(); // 输入 n&#xff0c;表示矩形的数量int a in.nextInt(); // 输入 a&#xff0c;表示整个区域的长度int b in.nextInt()…

Hive详解(5)

Hive 窗口函数 案例 需求&#xff1a;连续三天登陆的用户数据 步骤&#xff1a; -- 建表 create table logins (username string,log_date string ) row format delimited fields terminated by ; -- 加载数据 load data local inpath /opt/hive_data/login into table log…

如何在Portainer中创建Nginx服务并搭建静态站点实现公网访问本地网站

文章目录 前言1. 安装Portainer1.1 访问Portainer Web界面 2. 使用Portainer创建Nginx容器3. 将Web静态站点实现公网访问4. 配置Web站点公网访问地址4.1公网访问Web站点 5. 固定Web静态站点公网地址6. 固定公网地址访问Web静态站点 前言 Portainer是一个开源的Docker轻量级可视…

Nginx入门 -- 理解Nginx基础概念:连接(Connection)

在Nginx中&#xff0c;连接&#xff08;Connection&#xff09;是一个基础而又关键的概念。它涉及到服务器与客户端之间的通信、并发处理以及网络性能优化等方面。本文将深入探讨Nginx中连接的概念、类型以及相关的优化策略&#xff0c;帮助读者更好地理解和利用Nginx来构建高性…

报错:TypeError: Cannot handle this data type: (1, 1, 3), <f8

报错内容&#xff1a; 解决方法&#xff1a; 这个错误是由于 PIL 库无法处理特定的数据类型引起的。为了解决这个问题&#xff0c;你可以尝试将数据类型转换为 PIL 可以处理的类型&#xff0c;比如转换为 uint8 类型。你可以在调用 Image.fromarray() 方法之前&#xff0c;将…

SQL,group by分组后分别计算组内不同值的数量

SQL&#xff0c;group by分组后分别计算组内不同值的数量 如现有一张购物表shopping 先要求小明和小红分别买了多少笔和多少橡皮&#xff0c;形成以下格式 SELECT name,COUNT(*) FROM shopping GROUP BY name;SELECT name AS 姓名,SUM( CASE WHEN cargo 笔 THEN 1 ELSE 0 END)…

Java中copy 一个list,不用BeanUtils.copyProperties

1.List不起作用&#xff08;单个对象拷贝有用&#xff0c;list没有用&#xff09; cn.hutool.core.bean.BeanUtils.copyProperties(a, b); org.springframework.beans.BeanUtils.copyProperties(a, b); 2.有效&#xff08;使用JSONObject 先转成字符串再转成List对象&#x…

Java基础知识总结(31)

函数式接口 所谓函数式接口&#xff0c;就是接口中有且只能有一个抽象方法。用FunctionalInterface注解标注&#xff0c;接口可以包含多个默认方法、类方法&#xff0c;私有方法。 方法引用 如果Lambda 表达式的代码块只有一条代码&#xff0c;还可以在代码块中使用方法引用…

Qt QML 坐标转换函数

QML坐标转换 版本相关函数 版本 Qt5.15 相关函数 下面这些函数是隶属于Item的 /// Item object mapFromGlobal(real x, real y) object mapFromItem(Item item, rect r) object mapFromItem(Item item, real x, real y, real width, real height) object mapFromItem(Item …

安装使用Scoop

目标 今天看到一款用于windows系统的包管理工具Scoop&#xff0c;可以在powershell的命令行里安装软件&#xff0c;省去了找软件、配置环境等步骤&#xff0c;看起来还是很香的&#xff0c;正好最近再做csapp的家庭作业&#xff0c;安装个gcc看看是不是这么牛 安装Scoop 按照…

使用CRXjs、Vite、Vue 开发 Chrome 多页面插件,手动配置 vite.config.ts 和 manifest.json 文件

一、使用CRXjs、Vite、Vue 开发 Chrome 多页面插件&#xff0c;手动配置 vite.config.ts 和 manifest.json 文件 一、创建 Vue 项目 1. 使用 Vite 创建 Vue 项目 npm create vitelatest # npm yarn create vite # yarn pnpm create vite # pnpm选择 Vue 和 TS 进入项目…

在Windows中使用NVM安装node.js

NVM介绍 Node.js版本管理器&#xff08;Node Version Manager&#xff09;&#xff0c;简称NVM&#xff0c;是一款用于在单个系统上轻松安装和管理多个Node.js版本的命令行工具。它允许用户根据项目需求在不同版本之间自由切换&#xff0c;解决了因为不同项目依赖于不同Node.j…

Golang与Java:两种编程语言的对比

Golang与Java&#xff1a;两种编程语言的对比 在编程世界中&#xff0c;Golang和Java是两种非常流行的编程语言&#xff0c;它们各自具有独特的优势和特点。本文将对这两种语言进行详细对比&#xff0c;帮助开发者了解它们之间的差异&#xff0c;以便根据项目需求选择合适的编…

Python快速入门系列-6(Python高级特性)

第六章: Python高级特性 6.1 列表推导式与生成器6.1.1 列表推导式6.1.2 生成器6.1.2.1 生成器表达式6.1.2.2 生成器函数6.2 装饰器与迭代器6.2.1 装饰器6.2.2 迭代器6.3 异常处理与错误调试6.3.1 异常处理6.3.1.1 try-except语句6.3.1.2 try-except-else语句6.3.2 错误调试6.3…

【缺陷】硅光电二极管中的DT侧壁陷阱态的DLTS表征

【A DLTS study on Deep Trench Processing induced Trap States in Silicon Photodiodes】 概括 本研究通过深能级瞬态光谱&#xff08;DLTS&#xff09;技术对硅光电二极管中的深沟槽&#xff08;DT&#xff09;侧壁诱导的陷阱态进行了详细分析。研究发现&#xff0c;这些陷…

golang语言系列:通用技能之 Scrum、Kanban等敏捷管理策略

云原生学习路线导航页&#xff08;持续更新中&#xff09; 本文是 golang语言系列 文章&#xff0c;主要对编程通用技能 Scrum、Kanban等敏捷管理策略 进行学习 1.什么是敏捷开发 敏捷是一个描述软件开发方法的术语&#xff0c;它强调增量交付、团队协作、持续规划和持续学习。…

深入探秘Python生成器:揭开神秘的面纱

一、问题起源&#xff1a; 想象一下&#xff0c;您掌握了一种魔法&#xff0c;在代码世界里&#xff0c;您可以轻松呼唤出一个整数。然而&#xff0c;事情并不总是看起来那样简单。在Python的奇妙王国中&#xff0c;我遇到了一个有趣的谜题&#xff1a; def tst():try:print(…

电商新秀视频号小店,2024年值得加入吗?

大家好&#xff0c;我是电商糖果 视频号小店去年的热度非常高&#xff0c;很多第一批入驻的商家&#xff0c;也赚的盆满钵满。 于是就有不少商家问糖果&#xff0c;关于视频号小店2024值不值得加入&#xff0c;想听听我的看法。 糖果做电商有六七年的时间了&#xff0c;喜欢…