CV笔记:训练常用工具

关于图片数据处理类工具看我的另一篇博客:CV笔记:图片数据处理_X-ocean的博客-CSDN博客

目录

记录日志

python自带logging模块

格式化输出时间 

查看运行中占用的显存大小

多GPU训练 

Tensorboard


记录日志

python自带logging模块

import logging

logger = logging.getLogger('XX模型指标记录器')

file_handler = logging.FileHandler(
    filename='./draft/test.log',            # 日志记录文件
    encoding='utf-8',                       # 日志文件编码方式
    mode='a'                                # 日志文件打开模式:a代表追加,w代表覆盖
)

formatter = logging.Formatter("%(asctime)s - %(name)s-%(levelname)s %(message)s")
file_handler.setFormatter(formatter)

logger.addHandler(file_handler)
logger.setLevel(logging.INFO)



logger.debug('debug,用来打印一些调试信息,级别最低')
logger.info('info,用来打印一些正常的操作信息')
logger.warning('waring,用来用来打印警告信息')
logger.error('error,一般用来打印一些错误信息')
logger.critical('critical,用来打印一些致命的错误信息,等级最高')

然后会生成test.log文件,内容如下:

2022-11-28 13:06:46,056 - XX模型指标记录器-DEBUG debug,用来打印一些调试信息,级别最低
2022-11-28 13:06:46,056 - XX模型指标记录器-INFO info,用来打印一些正常的操作信息
2022-11-28 13:06:46,056 - XX模型指标记录器-WARNING waring,用来用来打印警告信息
2022-11-28 13:06:46,056 - XX模型指标记录器-ERROR error,一般用来打印一些错误信息
2022-11-28 13:06:46,056 - XX模型指标记录器-CRITICAL critical,用来打印一些致命的错误信息,等级最高

如果只是想在控制台输出,不输出到文件,则直接:

import logging

logging.basicConfig(format = '%(asctime)s - %(name)s - %(levelname)s - %(message)s-%(funcName)s',
                     level=logging.INFO)
logging.debug('debug,用来打印一些调试信息,级别最低')
logging.info('info,用来打印一些正常的操作信息')
logging.warning('waring,用来用来打印警告信息')
logging.error('error,一般用来打印一些错误信息')
logging.critical('critical,用来打印一些致命的错误信息,等级最高')

如果想获得日志文件的完整路径,可以使用下面代码得到一个路径字符串:

logger.handlers[0].baseFilename

如果想要输出tranceback错误信息,可以这样做:

try:
    # code
except Exception as e:
    logger.error("err info",exc_info = True)

下面封装好一个函数,拿来即可用:

import logging,os,time
from config import args

def get_logger(log_folder = args.log_file_path):
    log_file_name = time.strftime("%Y-%m-%d-%H-%M-%S", time.localtime(time.time())) + '.log'
    logger = logging.getLogger('')
    
    file_handler = logging.FileHandler(
        filename=os.path.join(log_folder,log_file_name),            # 日志记录文件
        encoding='utf-8',                       # 日志文件编码方式
        mode='a'                                # 日志文件打开模式:a代表追加,w代表覆盖
    )
    
    formatter = logging.Formatter("%(asctime)s - %(levelname)s: %(message)s")
    file_handler.setFormatter(formatter)
    
    logger.addHandler(file_handler)
    logger.setLevel(logging.INFO)

    return logger
 

 logging可以参考:

Python实用教程系列——Logging日志模块 - 知乎

格式化输出时间 

这里给出自己最喜欢最常用的一种:

import time
time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time()))

# 输出:'2022-12-03 19:17:24'

查看运行中占用的显存大小

使用如下代码

import torch
print(torch.cuda.max_memory_allocated())

单位是字节,如果想要转换成更常用的MB,还需要除以(1024*1014)。

在学校的Slurm超算系统上查看显存占用情况:

  1. 首先登录到计算结点:SSH g00xx
  2. 然后输入nvidia-smi命令查看显卡占用情况

多GPU训练 

参考:pytorch多GPU并行训练教程_哔哩哔哩_bilibili

Tensorboard

启动tensorboard查看数据:

tensorboard --logdir=<directory_name>

进度条tqdm

参考视频:【实用模块-5-tqdm进度条】 https://www.bilibili.com/video/BV1ZG411M7Ge

1. 最简单直接用法:直接用tqdm包裹可迭代对象

import time
from tqdm import tqdm,trange

# 最简单的例子:计算50的阶乘
p = 1
# 直接用tqdm包裹range
for i in tqdm(range(50)):
    p *= (i+1)
    time.sleep(0.05)
print("finish!")

2. trange: 类似于range

import time
from tqdm import tqdm,trange
# 直接用trange也可以
p = 1
for i in trange(50):
    p *= (i+1)
    time.sleep(0.05)
print("finish!")

3. 设置进度条前缀和后缀

# 设置进度条信息: 显示前缀和后缀
proc_bar = tqdm(range(50))
p = 1
for i in proc_bar:
    # 显示前缀
    # proc_bar.set_description(F"正在计算:")
    # 显示后缀,要求传入字典,因为可以显示多条信息
    proc_bar.set_postfix({"正在处理":F"{int(i)}","processing":F"{int(i)+1}"})
    time.sleep(0.05)

4. 自定义更新进度

# 自定义控制:适用于不希望改变for语句的写法
proc_bar = tqdm(total=100)      # 达到total时为100%
n = 40
for i in range(n):
    proc_bar.update(100/n)
    time.sleep(0.05)
# 关闭进度条,释放资源
proc_bar.close()

5. 图形化进度条

5.1 tk

# 弹出一个窗口显示,估计是用自带的tkinter写的
from tqdm.tk import tqdm
from time import sleep
for i in tqdm(range(50)):
    sleep(0.05)

5.2 rich

# 控制台彩色的线条,需要pip install rich
from tqdm.rich import tqdm
from time import sleep
for i in tqdm(range(50)):
    sleep(0.05)

5.3 gui

# 使用matplotlib来绘制, 流畅度不高
from tqdm.gui import tqdm
from time import sleep
for i in tqdm(range(50)):
    sleep(0.05)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值