将训练结果输出到控制台,同时保存在日志文件中,且可以控制输出的格式
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]\n%(message)s')
ch.setFormatter(formatter) # 两个hander设置个是,输出得信息包括,时间,信息得等级,以及message
fh.setFormatter(formatter)
logger.addHandler(fh) # 将两个hander添加到我们声明的logger中去
logger.addHandler(ch)
return logger
## 声明
logger = get_log('log.txt')
使用方式举例:
D_logs = "A: 2.22 B: 2.33 errD2: 2.16 C: 0.77"
G_logs = "D: 12.36 E: 10.17 F: 24.69 G: 5.09 H: 8.38 I: 2.97 G: 1.50"
for i in range(0,10):
logger.info(D_logs + '\n' + G_logs)
## 利用上述声明的logger可以直接代替print输出到控制台,而且可以保存在日志文件中
logger.info('''[%d/%d][%d]
Loss_D: %.2f Loss_G: %.2f Time: %.2fs'''
% (20, 600, 3000, 7.91 , 49.42, 3346.65))