自助手机网站建站软件,网站是数据,wordpress 内容 管理,北京西站24小时人工服务电话文章目录 训练常用工具[tqdm][argparse][yaml]tqdm1. 导入tqdm2. 传入可迭代对象快速使用进阶1#xff1a;通过update()自定义进度条每次更新的步长进阶2#xff1a;通过set_description和set_postfix自定义进度条内容 Argparse第一步#xff1a;创建ArgumentParser对象第二… 文章目录 训练常用工具[tqdm][argparse][yaml]tqdm1. 导入tqdm2. 传入可迭代对象快速使用进阶1通过update()自定义进度条每次更新的步长进阶2通过set_description和set_postfix自定义进度条内容 Argparse第一步创建ArgumentParser对象第二步**给ArgumentParser对象添加参数add_argument函数是核心**第三步解析得到参数 Yamlyaml基本语法数据类型字面量单个的不可再分的值。对象键值对的组合数组一组按次序排列的值 第一步基于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:0100:00, 98.07it/s]使用trange(100)简写tqdm(range(100))
for i in trange(100):time.sleep(0.01)进阶1通过update()自定义进度条每次更新的步长
with tqdm(total200) as pbar:for i in range(20): # 总共更新 20 次pbar.update(10) # 每次更新步长为 10time.sleep(1)with tqdm(total200) as pbar:这行代码初始化了一个进度条对象pbar设定总进度total为200。这里的total200表示整个进度条代表的操作总量是200个单位。for i in range(20):设置一个循环总共迭代20次。这表示我们计划通过20次迭代来完成总进度。pbar.update(10)在每次循环中调用pbar的update方法来更新进度条。参数10表示每次循环我们完成了总任务的10个单位。由于总任务量是200个单位而我们每次更新10个单位因此需要更新20次才能达到总进度这与range(20)设置的迭代次数相吻合。
中点在于每次迭代时通过update(10)更新进度条的内容
如果只循环10次最终只会在进度条为100/200时停止。 进阶2通过set_description和set_postfix自定义进度条内容
pbar tqdm(total100)
for i in range(10):time.sleep(0.1) # 模拟你的任务pbar.set_description(Epoch{}.format(i))# 显示进度条左部的内容pbar.set_postfix(batchi, loss0.1*i, accuracy0.95-0.01*i, refreshFalse)# 更新后缀信息以反映更多细节pbar.update(10)pbar.close()
进度条被设置了描述“Epoch i”同时每次循环更新时后缀显示了当前批次batch、损失loss和准确度accuracy。注意refreshFalse参数可以用来减少更新频率以避免在某些情况下的性能问题。
Epoch9: 100%|██████████| 100/100 [00:0100:00, 97.32it/s, accuracy0.86, batch9, loss0.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: backbone10, first30 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当参数列表中出现了对应的参数那么就会设置为Truestore_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(weightsyolov5s.pt, cfg, datadata/coco128.yaml, hypdata/hyps/hyp.scratch-low.yaml, epochs100, batch_size16, imgsz320, rectTrue, resumeFalse, nosaveFalse, novalFalse, noautoanchorFalse, noplotsFalse, evolveNone, bucket, cacheNone, image_weightsFalse, device0, multi_scaleFalse, single_clsFalse, optimizerSGD, sync_bnFalse, workers8, projectruns/train, nameexp, exist_okFalse, quadFalse, cos_lrFalse, label_smoothing0.0, patience100, freeze[0], save_period-1, seed0, local_rank-1, entityNone, upload_datasetFalse, bbox_interval-1, artifact_aliaslatest)
如何获取参数呢
直接通过.获取args中的属性
args.epochs
args.batch_size
…
Yaml
yaml全称Yeah Another Markup Language.(仍是一种标记语言)。他非常适合用来做以数据为中心的配置文件。
使用yaml目的复杂代码可以实现仅修改yaml文件重新运行打开yaml文件的python命令后参数就可以更新。不需要在python文件中找需要修改的参数位置。这个对于配置模型训练的超参数很有用
yaml基本语法
键值对。key value。冒号后边要接一个空格大小写敏感用缩进表示层级关系缩进不允许使用tab只允许空格用#表示注释单引号‘’与双引号“”表示字符串内容其中单引号中的内容不会被转义双引号中的内容会被转义 如果是在单引号中用\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))