python在类中手动定义标准化输出函数

news2024/9/21 12:48:46

在深度学习等训练框架中,有时候需要对模型的名称、参数量、训练进度、中间结果等进行标准化输出,从而方便实时查看代码运行情况,这时,可以在类中手动定义如下标准化的输出函数,然后在需要输出的地方进行调用即可。

首先,先介绍和定义一个对数字(训练步数)进行标准化显示的函数,如:1->1.0; 1000->1.0K; 10000->10.0K; 10000000->10.0M

def human_format(num):
    magnitude = 0
    while num >= 1000:
        magnitude += 1
        num /= 1000.0
    # add more suffixes if you need them
    return '{:3.1f}{}'.format(num, [' ', 'K', 'M', 'G', 'T', 'P'][magnitude])

然后,可以定义如下两个标准化输出的函数,其中 verbose() 用于静态显示要输出的内容,并进行左对齐;progress() 用于动态显示实时更新的内容

import sys

Class XXX():
    def __init__(self, ...):
        ...

    def verbose(self, msg):
        ''' Verbose function for print information to stdout'''
        if self.paras.verbose:
            if type(msg) == list:
                for m in msg:
                    print('[INFO]', m.ljust(100)) # 左对齐,在当前字符串的右侧填充空格,使整个字符串长度达到100个字符
            else:
                print('[INFO]', msg.ljust(100))

    def progress(self, msg):
        ''' Verbose function for updating progress on stdout (do not include newline) '''
        if self.paras.verbose:
            sys.stdout.write("\033[K")  # Clear line 这行代码使用sys.stdout.write方法向标准输出写入特殊的ANSI转义码\033[K,用于清除当前行的内容
            print('[{}] {}'.format(human_format(self.step), msg), end='\r') # end='\r'参数告诉print函数在打印完消息后不换行,而是回到行首,以便在下一次调用progress方法时覆盖前一次的输出,从而实现进度更新的效果。

例如,在如下调用时,会标准化输出如下:

self.verbose("Saved checkpoint (step = {}, {} = {:.2f}) and status @ {}".
            format(human_format(self.step), metric, score, ckpt_path))

[INFO] Saved checkpoint (step = 12.0K, wer = 0.62) and status @ ckpt/asr_hybrid_english_sd0/best_att.pth

if (self.step == 1) or (self.step % self.PROGRESS_STEP == 0):
    self.progress('Tr stat | Loss - {:.2f} | Grad. Norm - {:.2f} | {}'
        .format(total_loss.cpu().item(), grad_norm, self.timer.show()))

[14.2K] Tr stat | Loss - 0.39 | Grad. Norm - 1.89 | 0.447 sec/step (rd 0.6% | fw 19.4% | bw 79.9%)

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

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

相关文章

免费【2024】springboot 超市货品信息管理系统

博主介绍:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围:SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化…

修复SteamUI.dll加载失败的指南,快速修复failed to load steamui.dll

在使用Steam平台进行游戏下载、安装和运行时,可能会遇到一些系统错误,比如“failed to load steamui.dll”。这个错误通常意味着Steam的用户界面库文件steamui.dll出现了问题。本文将详细介绍steamui.dll文件的相关信息以及如何修复这一问题。 一.什么是…

vue 开发环境配置

1. nvm 安装 在 github上下载 最新的 nvm 包 https://github.com/coreybutler/nvm-windows/releases或者在 csdn 上下载(从github上迁移,方便下载)https://download.csdn.net/download/u011171506/89585197 下载后不用修改任何配置&#x…

Opencv学习项目4——手部跟踪

上一篇博客我们介绍了mediapipe库和对手部进行了检测,这次我们进行手部关键点的连线 代码实现 import cv2 import mediapipe as mpcap cv2.VideoCapture(1) mpHands mp.solutions.hands hands mpHands.Hands() mpDraw mp.solutions.drawing_utilswhile True:…

树莓派智能家居中枢

一个先进的枢纽,使智能家居系统更智能、更可定制、更易于控制 Homey Pro由树莓派 Compute Module 4 供电,Homey Pro 为用户提供了一个单一界面,用于控制和监控来自不同品牌的所有智能家居设备。它完全在本地网络上运行,而不是依赖云端,从而实现了最低的延迟、最高的…

对Linux目录结构的补充

📑打牌 : da pai ge的个人主页 🌤️个人专栏 : da pai ge的博客专栏 ☁️宝剑锋从磨砺出,梅花香自苦寒来 ☁️运维工程师的职责:监…

【数据结构】哈希表的模拟实现

文章目录 1. 哈希的概念2. 哈希表与哈希函数2.1 哈希冲突2.2 哈希函数2.3 哈希冲突的解决2.3.1 闭散列(线性探测)2.3.2 闭散列的实现2.3.3 开散列(哈希桶)2.3.4 开散列的实现 2.4 开散列与闭散列比较 1. 哈希的概念 在我们之前所接触到的所有的数据结构…

【C语言项目】 以链表实现的管理系统(注册、登录、对表进行数据操作)

第一次编辑这么长的文章,如果对你有帮助,可以点赞收藏一下一起学习!一起进步! 目录 一、项目介绍 二、代码介绍 三、小记 四、完整代码 五、输出结果展示 1、成功将终端输入的用户姓名和密码分别存入到.txt文件中 2、登陆成…

cpp学习记录03

结构体 定义:用户自定义符合数据类型,可以包含不同类型的不同成员。 //声明结构体 struct 结构体类型(自己起名) {成员1类型 成员1名称;。。。成员N类型 成员N名称;} 基本用法(类似class&…

探索 Electron:构建用户友好的登录页面流程

Electron是一个开源的桌面应用程序开发框架,它允许开发者使用Web技术(如 HTML、CSS 和 JavaScript)构建跨平台的桌面应用程序,它的出现极大地简化了桌面应用程序的开发流程,让更多的开发者能够利用已有的 Web 开发技能…

88年汉城奥运追忆:差距尤存,出路何在

(35年前的文章,摘自1989年2月1日《大众日报》) 差距尤存 出路何在 ——汉城奥运会后的思索 刘伟 一项调查表明:在当今中国中学生最喜爱的十本杂志中,竟没有一本是体育类杂志;在城市工人、干部、科技人员家…

搜索引擎项目(四)

SearchEngine 王宇璇/submit - 码云 - 开源中国 (gitee.com) 基于Servlet完成前后端交互 WebServlet("/searcher") public class DocSearcherServlet extends HttpServlet {private static DocSearcher docSearcher new DocSearcher();private ObjectMapper obje…

【前端/js】使用js读取本地文件(xml、二进制)内容

目录 说在前面FileReaderDOMParser文本文件二进制文件 说在前面 浏览器版本:Microsoft Edge 126.0.2 (正式版本) (64 位) FileReader MDNFileReader 接口允许 Web 应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容&#x…

Golang 高性能 Websocket 库 gws 使用与设计(一)

前言 大家好这里是,白泽,这期分析一下 golang 开源高性能 websocket 库 gws。 视频讲解请关注📺B站:白泽talk 介绍 gws:https://github.com/lxzan/gws |GitHub 🌟 1.2k,高性能的 …

STM32(七):STM32指南者-通信实验

目录 一、基本概念通讯基本概念1、串行和并行2、同步通讯与异步通讯3、全双工、半双工、单工4、通讯速率 USART基本概念1、串口通讯基本概念2、物理层3、协议层4、指南者的串口USART I2C基本概念SPI基本概念 二、USART串口实验前期准备1、安装安装 USB 转串口驱动_CH3402、野火…

【中项】系统集成项目管理工程师-第5章 软件工程-5.1软件工程定义与5.2软件需求

前言:系统集成项目管理工程师专业,现分享一些教材知识点。觉得文章还不错的喜欢点赞收藏的同时帮忙点点关注。 软考同样是国家人社部和工信部组织的国家级考试,全称为“全国计算机与软件专业技术资格(水平)考试”&…

代码随想录算法训练营day22 | 77. 组合、216.组合总和III 、17.电话号码的字母组合

碎碎念:加油 参考:代码随想录 回溯算法理论基础 回溯和递归是相辅相成的,只要有递归,就会有回溯。回溯通常在递归函数的下面。 回溯搜索到法的效率: 它其实是纯暴力的做法,不是一个高效的算法。 回溯法能…

将控制台内容输出到文本文件

示例代码: Imports System.IO Module Module1Sub Main()Dim fs As New FileStream("D:\Desktop\test\输出结果.txt", FileMode.Create, FileAccess.Write, FileShare.None)Dim sw As New StreamWriter(fs)Console.SetOut(sw)Console.SetError(sw)For i …

Spring 自定义集合实现策略

Spring 自定义集合实现策略 日常开发中,如果遇到复杂业务通常会用一个接口实现多个实现类。需要根据对应参数判断获取不同实现类。例如支付场景,根据选择支付方式,选择相应路由。如果实现类不多,通常会这样。如果实现类多了&…

【论文10】复现代码tips

一、准备工作 1.创建一个虚拟环境 conda create --name drgcnn38 python=3.8.18 2.激活虚拟环境 conda activate drgcnn38 注意事项 在Pycharm中终端(terminal)显示PS而不是虚拟环境base 问题如下所示 解决方法:shell路径改成cmd.exe 重启终端显示虚拟环境 3.安装torch …