前言
TensorFlowBoard过于强大,导致我对它依赖性很强,今年转手使用pytorch进行开发,本以为没了TensorFlowBoard,后来发现人家Tensorflow封装了个TensorFlowBoardX,专门给其他深度学习框架使用,不得不说TensorFlow确实厉害。不过用的久了我就有点嫌麻烦了,因为每一次都要用命令去解析events文件,然后生成网址,复制到浏览器打开,有时候打不开或者打开的慢,出于我近期的研究工作只需要看一个图像的大概走向,不用多么好看、精美、功能强大,因此就使用matplotlib下的pyplot进行图像绘制。
参数保存
众所周知,要画图得有参数才行,一开始我就直接写的把loss值啊,epoch啊,acc值什么的一股脑存在列表中,等训练结束了进行绘制保存,一开始还好,经历过两次服务器死机后我就傻眼了,一重启,训练的参数没保存,权重没保存(Pytorch如何临时保存训练参数文件用于再训练可以看这:Pytorch加载与保存模型(利用pth的参数更新h5预训练模型)_resumebb的博客-CSDN博客),更别谈要等到训练结束后才绘制的曲线图。吃一堑长一智,我决定将参数保存到文件中,每迭代一次保存一次,将来即使断电,死机也可以接着训练,然后从txt文件中读取数据进行绘制。
filename = 'result.txt'
with open(filename, 'w') as f:
for epoch in range(args.num_epochs):
XXXXXXXXXXXXXXXXXXXX(训练过程代码)
f.write(str(epoch)+" ")
f.write(str(loss)+" ")
XXXXXXXXXXXXXXXXXXXX(要保存的变量)
f.writelines(str(psnr)+"\n")
f.close()
大概流程如上,首先定义一个txt文件,给个路径,在训练前以可写方式创建文件对象f,在for循环中将epoch,loss,acc等需要保存的变量写入文件,它们之间用空格或者随便你想用什么隔开的符号进行分割,最后一个变量结束记得要加换行符,最后要记得关闭文件。
读取txt文件数据并绘制曲线图
举个例子我存了两种数据,一个是epoch,一个是psnr,它们之间用空格隔开,如下图:
首先要读取到txt文件中的数据:
f = open(r"psnr.txt")
line = f.readline()
a = []
b = []
while line:
num1, num2 = list(map(float,line.split(" ")))
a.append(num1)
b.append(num2)
line = f.readline()
f.close()
a = np.array(a)
b = np.array(b)
以图片的例子说明,两个变量通过split以空格来进行分割,然后将它们追加到a,b中,通过while循环读取所有行并追加,最后通过numpy的array方法进行转换,将list转为array,此时就拿到了txt中的数据。
接下来进行画图:
还是用这个例子,用pylot进行简单的绘制:
plt.plot(a, b, 'y-')
plt.tight_layout
plt.title('FSRCNN PSNR&LOSS')
plt.xlabel('Epochs')
plt.ylabel('PSNR')
plt.show()
出来的效果如下:
具体如何用matplotlib画图,里面的参数什么意思,加标题,画子图,线条颜色样式等参考:Matplotlib绘制各类图像(折线图,曲线图...)-画图的神_resumebb的博客-CSDN博客
还可以画统计图
import matplotlib.pyplot as plt
# 这两行代码解决 plt 中文显示的问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
keywords = ('model1', 'model2', 'model3', 'model4')
params = [12809, 11491, 11925, 13245]
flops = [415.06, 348.92, 353.84, 420.07]
plt.bar(keywords, params, width=0.35)
# plt.bar(keywords, params, width=0.2)
for i in range(4):
plt.text(i,params[i],"%s"%params[i],va='center')
# plt.bar(keywords, params)
plt.title('参数对比')
plt.show()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)