python matplotlib 绘制训练曲线 综合示例

您所在的位置:网站首页 陌陌跟探探的区别 python matplotlib 绘制训练曲线 综合示例

python matplotlib 绘制训练曲线 综合示例

#python matplotlib 绘制训练曲线 综合示例| 来源: 网络整理| 查看: 265

文章目录 1 导出曲线数据2 python简单的 绘制曲线3 Savitzky-Golay 滤波器--平滑曲线4 对y轴数值缩放处理5 设置图题、图例、字体、网格、保存曲线图6 补充6.1 python 曲线平滑处理——方法总结-详解6.2 Tensorboard可视化训练曲线导出数据用Python绘制6.3 PyTorch可视化工具-Tensorboard在线查看训练曲线、网络结构图等6.4 PyTorch常用小工具-Tensorboard、Summary、Profiler 7 源码下载、曲线数据下载

1 导出曲线数据

训练损失曲线数据,用.csv格式导出,数据如下表所示。用python绘制出 step和Value的关系曲线

在这里插入图片描述

2 python简单的 绘制曲线 from matplotlib import pyplot as plt import csv import numpy as np filename = "D:/python/pltt/train_loss.csv" #.csv文件路径,可以添加绝对路径 with open(filename) as f: csvreader = csv.reader(f, delimiter = ",", quotechar='"') for line in range(1): #1代表从文件第2行开始读取 next (csvreader) print("lines: ",line) #打印行数 x = [] #横纵坐标分别建立了两个list y = [] for row in csvreader: x.append(float(row[1])) #读取第2、3列数据,放入list y.append(float(row[2])) # 可视化图线 plt.plot(x,y,'g', linewidth=1.0) #曲线颜色绿色,线条宽度1 plt.show()

在这里插入图片描述

可以看到上面的曲线震荡的很厉害,不利于观察整体趋势,需要滤波处理

3 Savitzky-Golay 滤波器–平滑曲线

对曲线进行平滑处理,通过Savitzky-Golay 滤波器,可以在scipy库里直接调用,不需要再定义函数。

from matplotlib import pyplot as plt import csv import numpy as np # 使用Savitzky-Golay 滤波器后得到平滑图线 from scipy.signal import savgol_filter filename = "D:/python/pltt/train_loss.csv" #.csv文件路径,这里可以添加绝对路径 with open(filename) as f: csvreader = csv.reader(f, delimiter = ",", quotechar='"') for line in range(1): #1代表从文件第2行开始读取 next (csvreader) print("lines: ",line) #打印行数 x = [] #横纵坐标分别建立了两个list y = [] for row in csvreader: x.append(float(row[1])) #读取第2、3列数据,放入list y.append(float(row[2])) #Savitzky-Golay 滤波器实现曲线平滑 ''' scipy.signal.savgol_filter(y, window_length, polyorder) y--代表曲线点坐标(x,y)中的y值,为要滤波的信号 window_length--即窗口长度取值为奇数且不能超过len(x)。它越大,则平滑效果越明显;越小,则更贴近原始曲线。 polyorder--为多项式拟合的阶数。它越小,则平滑效果越明显;越大,则更贴近原始曲线。 mode--滤波器的填充信号的扩展类型 ''' y = savgol_filter(y, 99, 1, mode= 'nearest') # 可视化图线 plt.plot(x,y,'g', linewidth=1.0) #曲线颜色绿色,线条宽度1 plt.show() y = savgol_filter(y, 99, 1, mode= 'nearest')

在这里插入图片描述

4 对y轴数值缩放处理

对x,y值进行缩放,有两种方法

# 方法① list转array,在再缩放 y=np.array(y)/500 #list转array,再缩放 # 方法② 直接在plt.plot(x,y/500)中缩放 plt.plot(x, y,'g')

错误方法

y = savgol_filter(y/500, 99, 1, mode= 'nearest') TypeError: unsupported operand type(s) for /: 'list' and 'int' y.append(float(row[2]/500)) #读取数据,放入list TypeError: unsupported operand type(s) for /: 'str' and 'int' y = y /500 TypeError: unsupported operand type(s) for /: 'list' and 'int'

完整代码

from matplotlib import pyplot as plt import csv import glob from os.path import basename import numpy as np # 使用Savitzky-Golay 滤波器后得到平滑图线 from scipy.signal import savgol_filter files = sorted(glob.glob("D:/python/pltt/train_loss.csv")) #读取目录下所有以.csv结尾的文件,这里可以添加绝对路径 for file in files: filename = basename(file).rsplit('.', 1)[0] #用.来分割文件名,取前半部分,例如XX.csv,取XX print('\r'+ filename + " ", flush = True) with open(file) as f: csvreader = csv.reader(f, delimiter = ",", quotechar='"') for line in range(1): #1代表从文件第2行开始读取 next (csvreader) print("lines: ",line) #打印行数 x = [] y = [] #横纵坐标分别建立了两个list for row in csvreader: x.append(float(row[1])) #读取第2、3列数据 y.append(float(row[2])) #读取数据,放入list y=np.array(y)/500 #list转array,在缩放 #Savitzky-Golay 滤波器实现曲线平滑 ''' scipy.signal.savgol_filter(y, window_length, polyorder) y--为要滤波的信号 window_length--即窗口长度取值为奇数且不能超过len(x)。它越大,则平滑效果越明显;越小,则更贴近原始曲线。 polyorder--为多项式拟合的阶数。它越小,则平滑效果越明显;越大,则更贴近原始曲线。 ''' y= savgol_filter(y, 55, 1, mode= 'nearest') # 可视化图线 plt.plot(x, y,'g') plt.show()

在这里插入图片描述

5 设置图题、图例、字体、网格、保存曲线图 from matplotlib import pyplot as plt import csv import glob from os.path import basename import numpy as np # 使用Savitzky-Golay 滤波器后得到平滑图线 from scipy.signal import savgol_filter #dpi参数指定绘图对象的分辨率,即每英寸多少个像素 ;figsize:指定figure的宽和高,单位为英寸 fig=plt.figure(dpi = 80, figsize=(15,8)) #设置标题 plt.title("Train_loss",fontsize = 25) #标题 plt.xlabel("Iterations", fontsize = 25) #横坐标 plt.ylabel("Loss", fontsize = 25) #纵坐标 files = sorted(glob.glob("D:/python/pltt/train_loss.csv")) #读取目录下所有以.csv结尾的文件,这里可以添加绝对路径 for file in files: filename = basename(file).rsplit('.', 1)[0] #用.来分割文件名,取前半部分,例如XX.csv,取XX print('\r'+ filename + " ", flush = True) with open(file) as f: csvreader = csv.reader(f, delimiter = ",", quotechar='"') for line in range(1): #1代表从文件第2行开始读取 next (csvreader) print("lines: ",line) #打印行数 x = [] y = [] #横纵坐标分别建立了两个list for row in csvreader: x.append(float(row[1])) #读取第2、3列数据 y.append(float(row[2])) #读取数据,放入list #设置横纵坐标显示范围 # plt.xlim((0,90000))#横轴范围 # plt.ylim((0,200)) #纵轴范围 plt.tick_params(labelsize=20)#设置坐标刻度值的字体大小 y=np.array(y)/500 #list转array,再缩放,否则报错 #Savitzky-Golay 滤波器实现曲线平滑 ''' scipy.signal.savgol_filter(y, window_length, polyorder) y--为要滤波的信号 window_length--即窗口长度取值为奇数且不能超过len(x)。它越大,则平滑效果越明显;越小,则更贴近原始曲线。 polyorder--为多项式拟合的阶数。它越小,则平滑效果越明显;越大,则更贴近原始曲线。 ''' y_smooth = savgol_filter(y, 55, 1, mode= 'nearest') # 可视化图线 plt.plot(x, y_smooth,'g', label = '%s' % filename, linewidth=3.0) #plt.legend()函数的作用是给图像加图例。 plt.legend(frameon=True,loc="upper right",fontsize=25) #分别为图例有边框、图例放在右上角、图例大小 #plt.grid()#添加网格 plt.savefig('D:/python/pltt/Train_loss' + '.png',dpi = 80) #保存了绘制的图像 print("Done processing " + str(len(files)) + " files.") plt.grid()#添加网格 plt.show()

在这里插入图片描述

6 补充 6.1 python 曲线平滑处理——方法总结-详解

python 曲线平滑处理——方法总结(Savitzky-Golay 滤波器、make_interp_spline插值法和convolve滑动平均滤波)

6.2 Tensorboard可视化训练曲线导出数据用Python绘制

Tensorboard可视化训练曲线导出数据用Python绘制

6.3 PyTorch可视化工具-Tensorboard在线查看训练曲线、网络结构图等

Tensorboard在线查看训练曲线、网络结构图等

6.4 PyTorch常用小工具-Tensorboard、Summary、Profiler

PyTorch常用小工具-Tensorboard、Summary、Profiler

7 源码下载、曲线数据下载

曲线数据表、源代码、曲线图 下载



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3