当前位置:   article > 正文

python 绘制训练曲线--插值法 曲线平滑处理_python plt 平滑曲线

python plt 平滑曲线

1 训练曲线–震荡的非常厉害

上一篇文章用python自己绘制训练曲线震荡的非常厉害(下图绿色曲线),而tensorboard的曲线比较平滑(下下图黑色曲线),

原因是tensorboard显示的曲线是经过平滑处理过的(其灰黑色的背景就平滑处理前的波形)

在这里插入图片描述
在这里插入图片描述

2 插值法 曲线行平滑处理

实现所需的库: numpy、scipy、matplotlib

插值法的常见实现方法:

nearest:最邻近插值法
zero:阶梯插值
slinear:线性插值
quadratic、cubic:23阶B样条曲线插值
  • 1
  • 2
  • 3
  • 4

详情代码如下

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]))   #读取第23列数据,放入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()      
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

平滑效果
在这里插入图片描述

3 注意事项—平滑前先将 list转array

# 插值法 对曲线平滑处理
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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在这里插入图片描述

4 Savitzky-Golay 滤波器实现曲线平滑

python 绘制训练曲线 平滑处理–Savitzky-Golay 滤波器曲线平滑

5 python 绘制训练曲线–基于Numpy.convolve曲线平均滤波

python 绘制训练曲线–基于Numpy.convolve曲线平均滤波

python 绘制训练曲线–插值法 曲线平滑处理

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/803832
推荐阅读
相关标签
  

闽ICP备14008679号