深度学习训练中常用的三个基础库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;分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向的学习指导…

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轻量级可视…

报错: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)…

使用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…

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;它强调增量交付、团队协作、持续规划和持续学习。…

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

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

基于springboot实现网上点餐系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现网上点餐系统演示 摘要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于网上点餐系统当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了网上点餐系统…

【解決|三方工具】Obi Rope 编辑器运行即崩溃问题

开发平台&#xff1a;Unity 2021.3.7 三方工具&#xff1a;Unity资产工具 - Obi Rope   问题背景 使用Unity三方开发工具 - Obi Rope 模拟绳索效果。配置后运行 Unity 出现报错并崩溃。通过崩溃日志反馈得到如下图所示 这是一个序列化问题造成的崩溃&#xff0c;指向性为 Obi…

基于8086数码管数字钟计时器设计

**单片机设计介绍&#xff0c;基于8086数码管数字钟计时器设计 文章目录 一 概要二、功能设计三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于8086数码管数字钟计时器设计是一个结合了微处理器控制、数码管显示以及计时功能的综合性项目。通过此设计&#xff0c;我们…

(负载点电源)18V/2A同步降压芯片快速瞬态响应逐周期限流保护

1. 产品特性 ➢ 输入电压范围&#xff1a; 4.5V~18V ➢ 最大负载&#xff1a; 2A ➢ 内部 PWM 控制器以达到快速瞬时响应 ➢ 软启保护时间 tss&#xff1a; 1ms ➢ 逐周期限流保护 ➢ 内部补偿 ➢ 可调的输入欠压锁定 ➢ 短路保护&#xff0c;过温保护 2. 功能描述 P…

前端-css-01

1.CSS 长度单位和颜色设置 1.1CSS 中的长度单位 px 像素 em 字体大小的倍数&#xff08;字体默认是16px&#xff09; % 百分比 1.2CSS 中的颜色设置方式 1.2.1使用颜色名表示颜色 red、orange、yellow、green、cyan、blue、purple、pink、deeppink、skyblue、greenyellow .…

【漏洞复现】通天星CMSV6弱口令漏洞

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…

机器学习-生存分析:基于QHScrnomo模型的乳腺癌患者风险评估与个性化预测

一、引言 乳腺癌作为女性常见的恶性肿瘤之一&#xff0c;对女性健康构成威胁。随着医疗技术的不断进步&#xff0c;个性化医疗逐渐成为乳腺癌治疗的重要方向。通过深入研究乳腺癌患者的风险评估和个性化预测&#xff0c;可以帮助医生更准确地制定治疗方案&#xff0c;提高治疗效…

强制不换行,

white-space:nowrap强制不换行&#xff0c;效果如下