网络输出结果写入文件
在CNN网络训练的时候,经常需要把网络中的一些参数、结果打印出来。为了可以有效的保存这些信息,我们可以把这些结果保存在文档里面,比如txt、log等。总结了几种方法,仅供参考!
- 直接保存在log文件中
直接在训练的文件xxx.py后面加上>>train.log ,
其中 >>表示写入,不覆盖原来的信息;
也可以这样 > 覆盖写入;
可以在制定文件保存的路径、文件名字自己随意设置。(下面是一个参考)
代码:
CUDA_VISIBLE_DEVICES=0 python train.py >>log_log/train-`date +%Y-%m-%d-%H-%M-%S`.log --upscale_factor 2 --patch_size 48 --batch_size 16 --n_iters 30000000 --gpu_mode True
这个可以按照时间保存log文件,log文件中显示的是XX.py文件中打印的所有内容。
2. 电脑页面上上所有内容的保存,包括报错
#LOG=./../experiment/RC-`date +%Y-%m-%d-%H-%M-%S`.txt
CUDA_VISIBLE_DEVICES=0 python train.py --upscale_factor 2 --patch_size 48 --batch_size 16 --n_iters 30000000 --gpu_mode True 2>&1 | tee $LOG
- 同时在屏幕上显示打印内容和写入文件
有两中方法可以实现,1、用文件的写入方式;2、使用logging ;下面分别写一下我的使用过程:
- 文件写入方式
代码:
with open("log_log/log.txt",'a') as f:#建立.txt文件,路径+名字
nowtime= datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')#写入时间,方便查找
f.write('\n') #换行
f.write(nowtime+'\n') #写入时间,换行
##txt
i=str(idx_iter) #.encode()#变量类型转换,一共写入3个变量,str
loss=np.array(loss_list).mean()
loss=str(loss) #.encode()
f.write('iteartion: '+i+' ') #写入文档
f.write('loss: '+loss+' ')
f.write('lr: '+str(optimizer.param_groups[0]['lr']))
f.write('\n')
f.flush() #刷新
f.close()
程序运行:
直接运行就可以了,例如:python xx.py
注意:在CNN网络中,需要调整位置。
- logging写入
这个刚刚接触,了解不是很多,但是和文件写入有的像。
下面看代码:import logging logging.basicConfig(level=logging.DEBUG, filename='output.log', datefmt='%Y/%m/%d %H:%M:%S', format='%(asctime)s - %(name)s - %(levelname)s - %(lineno)d - %(module)s - %(message)s') logger = logging.getLogger(__name__) logger.info('This is a log info') logger.debug('Debugging') logger.warning('Warning exists') logger.info('Finish') #把变量写入就可以了,可以同时在页面可文件中看到。