使用Python中的log模块将loss输出到终端与保存到文件
记得之前对深度学习中得loss输出,经常自己会将输出流重新定向到一个文件中,
比如
python main.py > & | tee log.txt
对于caffe这种c++框架而言,用输出流重定向的方法是比较妥的,但是这样输出会有一个问题,比如,出了文件中print特定格式得loss之外,
你进行debug的时候,想print一些东西,debug print的结果也print到了文件中,但是实际上你并不想要这种结果,或者有时候输出流重定向有一定得延迟,这个时候需要等一等才能看到输出的loss
对于python,实际上有更好的方法,那就是log模块。
关于log模块,这里只讲如何使用log模块同时输出想要print得信息到终端与保存要print得信息到文件中
# -*-coding:utf-8-*-
# 设置格式
import logging def get_log(file_name):
logger = logging.getLogger('train') # 设定logger的名字
logger.setLevel(logging.INFO) # 设定logger得等级 ch = logging.StreamHandler() # 输出流的hander,用与设定logger的各种信息
ch.setLevel(logging.INFO) # 设定输出hander的level fh = logging.FileHandler(file_name, mode='a') # 文件流的hander,输出得文件名称,以及mode设置为覆盖模式
fh.setLevel(logging.INFO) # 设定文件hander得lever formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
ch.setFormatter(formatter) # 两个hander设置个是,输出得信息包括,时间,信息得等级,以及message
fh.setFormatter(formatter)
logger.addHandler(fh) # 将两个hander添加到我们声明的logger中去
logger.addHandler(ch)
return logger
在使用的时候,直接传入路径,
logger = setting.get_log('log.txt')
然后就可以愉快的输出信息到到终端以及输出信息到文件中啦
比如,我原来打印loss可能需要这么写
print("Epoch [%d/%d], Iter [%d/%d] Loss: %.4f" % (epoch + 1, 80, i + 1, 500, loss.data.item()))
现在打印loss可以这样写
logger.info("Epoch [%d/%d], Iter [%d/%d] Loss: %.4f" % (epoch + 1, 80, i + 1, 500, loss.data.item()))
因为我们刚刚把两个hander给add到了我们声明得logger中,所以,上面一行代码可以同时输出信息到终端,同时也可以输出信息到文件中
使用Python中的log模块将loss输出到终端与保存到文件的更多相关文章
- Python中的logging模块
http://python.jobbole.com/86887/ 最近修改了项目里的logging相关功能,用到了python标准库里的logging模块,在此做一些记录.主要是从官方文档和stack ...
- python中的logger模块
logger 提供了应用程序可以直接使用的接口handler将(logger创建的)日志记录发送到合适的目的输出filter提供了细度设备来决定输出哪条日志记录formatter决定日志记录的最终输出 ...
- Python入门之Python中的logging模块
基本用法 下面的代码展示了logging最基本的用法. import logging import sys # 获取logger实例,如果参数为空则返回root logger logger = log ...
- Python 中 logging 日志模块在多进程环境下的使用
因为我的个人网站 restran.net 已经启用,博客园的内容已经不再更新.请访问我的个人网站获取这篇文章的最新内容,Python 中 logging 日志模块在多进程环境下的使用 使用 Pytho ...
- Python中的logging模块就这么用
Python中的logging模块就这么用 1.日志日志一共分成5个等级,从低到高分别是:DEBUG INFO WARNING ERROR CRITICALDEBUG:详细的信息,通常只出现在诊断问题 ...
- python中日志logging模块的性能及多进程详解
python中日志logging模块的性能及多进程详解 使用Python来写后台任务时,时常需要使用输出日志来记录程序运行的状态,并在发生错误时将错误的详细信息保存下来,以别调试和分析.Python的 ...
- [ Python入门教程 ] Python中日志记录模块logging使用实例
python中的logging模块用于记录日志.用户可以根据程序实现需要自定义日志输出位置.日志级别以及日志格式. 将日志内容输出到屏幕 一个最简单的logging模块使用样例,直接打印显示日志内容到 ...
- Python中的random模块,来自于Capricorn的实验室
Python中的random模块用于生成随机数.下面介绍一下random模块中最常用的几个函数. random.random random.random()用于生成一个0到1的随机符点数: 0 < ...
- Python中的random模块
Python中的random模块用于生成随机数.下面介绍一下random模块中最常用的几个函数. random.random random.random()用于生成一个0到1的随机符点数: 0 < ...
随机推荐
- MapReduce(一)
MapReduce(一) 一.介绍 百度百科: MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算.概念"Map(映射)"和"Reduce(归约) ...
- js中用来操作数组的相关的方法
push向数组的的末尾添加新的内容 unshift向数组的开头增加新的内容 slice(n,m)从索引n开始(包含n),找到索引m处(不包含m),然后把找到的内容作为一个新的数组返回,原有的数组不改变 ...
- C++类型检查
与大多数语言一样,C++也是类型决定了能对该对象进行的操作,一条表达式是否合法依赖于其中参与运算的对象的类型,C++是一种静态数据类型语言,它的类型检查发生在编译时, 因此编译器知道程序中每一个变量对 ...
- [转]一次CMS GC问题排查过程(理解原理+读懂GC日志)
这个是之前处理过的一个线上问题,处理过程断断续续,经历了两周多的时间,中间各种尝试,总结如下.这篇文章分三部分: 1.问题的场景和处理过程:2.GC的一些理论东西:3.看懂GC的日志 先说一下问题吧 ...
- python字符串内建函数
- 关于jsp页面的一些知识(一)
1,<%@ include file=” ”%> ——最简洁易懂的解释 http://blog.csdn.net/little_stars/article/details/17373477 ...
- 谈一谈JUnit神奇的报错 java.lang.Exception:No tests found matching
最近在学习Spring+SpringMVC+MyBatis,一个人的挖掘过程确实有点艰难,尤其是有一些神奇的报错让你会很蛋疼.特别是接触一些框架还是最新版本的时候,会因为版本问题出现很多错误,欢迎大家 ...
- MySql多个count查询
现有一个student表结构数据如下: id hight sex age 1 160 0 16 2 170 1 16 3 180 1 17 4 160 1 16 5 170 ...
- js里面判断一个字符串是否包含某个子串的方法
1. ES6的includes, 返回 Boolean var string = "foo", substring = "oo"; string.include ...
- 逆袭之旅DAY16.东软实训.Oracle.序列
2018-07-12 14:07:44 序列 序列1.创建序列create sequence 序列名 [increment by n] ---步长 [start with n] ---序列的起始值 序 ...