logging和SummaryWriter使用

 大多数github上的神经网络模型都会包括一些必要的记录模块,为了更好的观察训练过程,记录也确实是很有必要的,主要的记录训练过程的方法包含两种,分别是利用logging和SummaryWriter,一个是将训练过程中的一些设置信息打印出来,一般是同时打印到log文件和控制台上的。SummaryWriter一般是用来记录训练过程中的学习率和损失函数的变化,通过命令行可以得到一个网址,查看起来也很方便

import logging 
if __name__ == "__main__":
#创建一个logger,输入参数为Logger的名称,自己拟定
logger = logging.getLogger("logger_test")
#设置logger的等级,等级有DEBUG < INFO < WARNING < ERROR < CRITICAL
#默认为WARNING等级,当打印的信息的等级再WARNING和其上的时候才记录
logger.setLevel(logging.INFO)
#logger打印信息的格式,时间 等级 打印内容,也可在这里设置logger等级,不设置的话只会打印message
logging.basicConfig(format='%(asctime)s - %(levelname)s - %(message)s')
#创建handle,log_file为写入文件的名称,log文件
#对于handle同样需要设置对应的输出格式和等级
file_handler = logging.FileHandler(log_file, 'w')
file_handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s'))
file_handler.setLevel(logging.INFO)
#将handle添加进logger,这样logger在控制台打印信息的同时还会将信息打印到txt文件中去
logger.addHandler(file_handler)
from torch.utils.tensorboard import SummaryWriter

#创建,三种方式
#默认创建方式,会将文件保存在下面的文件夹中,文件夹的名称会根据系统时间和用户名自动生成
writer = SummaryWriter()
# folder location: runs/May04_22-14-54_s-MacBook-Pro.local/

#自己指定保存文件夹
# create a summary writer using the specified folder name.
writer = SummaryWriter("my_experiment")
# folder location: my_experiment

#在文件夹后面添加后缀
# create a summary writer with comment appended.
writer = SummaryWriter(comment="LR_0.1_BATCH_16")
# folder location: runs/May04_22-14-54_s-MacBook-Pro.localLR_0.1_BATCH_16/

#将数据添加到event中去
#使用writer.add_scalar()添加,其中tag为数据的名称,scalar_value为y值,global_step为x值
x = range(100)
for i in x:
    #writer.add_scalar(tag='y=2x', scalar_value=i * 2, global_step=i)
    writer.add_scalar('y=2x', i * 2, i)
writer.close()

#最后是访问,激活python环境,运行下面代码,会得到一个网址,打开网址就可以看到图表了
tensorboard --logdir=事件文件所在的文件夹名

logging是Python标准库中的一个模块,提供了一种灵活的方式来记录程序运行时的信息。logging可以将程序运行时的信息写入到文件、控制台或其他地方,方便我们进行调试和排错。 使用logging需要先创建一个Logger对象,然后通过Logger对象来设置日志的级别、输出方式等。常用的日志级别有5个,从高到低分别是CRITICAL、ERROR、WARNING、INFO和DEBUG。设置日志级别时,只有大于等于该级别的日志才会被记录。 以下是一个简单的logging示例: ```python import logging # 创建Logger对象 logger = logging.getLogger('mylogger') # 设置日志级别为DEBUG logger.setLevel(logging.DEBUG) # 创建一个FileHandler,将日志写入文件 fh = logging.FileHandler('mylog.log') # 设置日志格式 formatter = logging.Formatter('%(asctime)s %(name)s %(levelname)s %(message)s') fh.setFormatter(formatter) # 将FileHandler添加到Loggerlogger.addHandler(fh) # 输出不同级别的日志 logger.debug('debug message') logger.info('info message') logger.warning('warning message') logger.error('error message') logger.critical('critical message') ``` 上述代码中,首先创建了一个Logger对象,并设置日志级别为DEBUG。然后创建了一个FileHandler对象,将日志写入到文件中,设置了日志格式,并将FileHandler添加到Logger中。最后输出了5个不同级别的日志信息。 输出的日志文件内容如下: ``` 2021-05-26 14:50:39,230 mylogger DEBUG debug message 2021-05-26 14:50:39,230 mylogger INFO info message 2021-05-26 14:50:39,230 mylogger WARNING warning message 2021-05-26 14:50:39,230 mylogger ERROR error message 2021-05-26 14:50:39,230 mylogger CRITICAL critical message ``` 可以看到,日志文件中按照指定的格式记录了每条日志的时间、Logger对象名称、日志级别和日志内容。 除了FileHandlerlogging模块还提供了其他的Handler,如StreamHandler、SMTPHandler等,可以将日志输出到控制台、邮件等地方。另外,logging模块还支持多线程、多进程等场景下的日志记录,具有很好的灵活性和扩展性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值