赞
踩
上一篇文章用python自己绘制训练曲线震荡的非常厉害(下图绿色曲线),而tensorboard的曲线比较平滑(下下图黑色曲线),
原因是tensorboard显示的曲线是经过平滑处理过的(其灰黑色的背景就平滑处理前的波形)
实现所需的库: numpy、scipy、matplotlib
插值法的常见实现方法:
nearest:最邻近插值法
zero:阶梯插值
slinear:线性插值
quadratic、cubic:2、3阶B样条曲线插值
详情代码如下
from matplotlib import pyplot as plt import csv import numpy as np # 使用插值法 对曲线平滑处理 滤波器后得到平滑曲线 from scipy.interpolate import make_interp_spline 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])) # 插值法 对曲线平滑处理 x_array=np.array(x) #list转array,为了调用下面的min,max y_array=np.array(y) x_smooth = np.linspace(x_array.min(), x_array.max(), 300) # np.linspace 等差数列,从x.min()到x.max()生成500个数,便于后续插值 y_smooth = make_interp_spline(x_array, y_array)(x_smooth) # 可视化图线 plt.plot(x_smooth,y_smooth,'g', linewidth=1.0) #曲线颜色绿色,线条宽度1 plt.show()
平滑效果
# 插值法 对曲线平滑处理
x_array=np.array(x) #list转array,为了调用下面的min,max; 否则下面min,max执行会报错
y_array=np.array(y)
x_smooth = np.linspace(x_array.min(), x_array.max(), 300) # np.linspace 等差数列,从x.min()到x.max()生成500个数,便于后续插值
y_smooth = make_interp_spline(x_array, y_array)(x_smooth)
python 绘制训练曲线 平滑处理–Savitzky-Golay 滤波器曲线平滑
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。