如何用pyplot优雅的绘制loss,acc,miou,psnr变化曲线

前言

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,它们之间用空格隔开,如下图:

如何用pyplot优雅的绘制loss,acc,miou,psnr变化曲线_第1张图片

首先要读取到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()

出来的效果如下:

如何用pyplot优雅的绘制loss,acc,miou,psnr变化曲线_第2张图片

具体如何用matplotlib画图,里面的参数什么意思,加标题,画子图,线条颜色样式等参考:Matplotlib绘制各类图像(折线图,曲线图...)-画图的神_resumebb的博客-CSDN博客

 

 

 

你可能感兴趣的:(深度学习,深度学习,pyplot,python,可视化)