python matplotlib 绘制训练曲线 综合示例——平滑处理、图题设置、图例设置、字体大小、线条样式、颜色设置
文章目录
- 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 npfilename = "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) #曲线颜色绿色,线条宽度1plt.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_filterfilename = "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) #曲线颜色绿色,线条宽度1plt.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_filterfiles = 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 = [] #横纵坐标分别建立了两个listfor 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 = [] #横纵坐标分别建立了两个listfor 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 源码下载、曲线数据下载
曲线数据表、源代码、曲线图 下载
相关文章:
python matplotlib 绘制训练曲线 综合示例——平滑处理、图题设置、图例设置、字体大小、线条样式、颜色设置
文章目录1 导出曲线数据2 python简单的 绘制曲线3 Savitzky-Golay 滤波器--平滑曲线4 对y轴数值缩放处理5 设置图题、图例、字体、网格、保存曲线图6 补充6.1 python 曲线平滑处理——方法总结-详解6.2 Tensorboard可视化训练曲线导出数据用Python绘制6.3 PyTorch可视化工具-Te…...
vue-element-plus-admin整合后端实战——实现系统登录、缓存用户数据、实现动态路由
目标 整合vue-element-plus-admin前端框架,作为开发平台的前端。 准备工作 前端选用vue-element-plus-admin,地址 https://gitee.com/kailong110120130/vue-element-plus-admin。 首先clone项目,然后整合到开发平台中去。这是一个独立的前…...
Shader Graph2-PBR介绍之表面属性(图解)
PBR的实现由光线和表面属性决定,下面我们介绍一下表面属性。这个5个属性在ShaderGraph的根节点是经常的看到,左侧是Unity中的,右侧是UE中的。 在没有Metallic金属的情况下,基础颜色值就决定了颜色的漫反射值,也就是说基…...
Java多线程编程,Thread类的基本用法讲解
文章目录如何创建一个线程start 与 run线程休眠线程中断线程等待获取线程实例如何创建一个线程 之前我们介绍了什么是进程与线程,那么我们如何使用代码去创建一个线程呢?线程操作是操作系统中的概念,操作系统内核实现了线程这样的机制&#…...
TIA博途Wincc_多路复用变量的使用方法示例(实现多台相同设备参数的画面精简)
TIA博途Wincc_多路复用变量的使用方法示例(实现多台相同设备参数的画面精简) 使用多路复用变量的好处: 当项目中存在多个相同的设备(例如:变频器、电机等),对这些设备在HMI上进行监控或修改参数时,不再需要逐个建立画面或IO域等,只需通过单个画面或IO域组合即可实现对…...
关于console你不知道的那些事
看到标题,大家会不会想,我都在前端岗位叱咤风云这么多年了, console 这个玩意用你讲 但是, 今天我将带你看到不一样的 console, 可以带来更多的帮助 了解 console 什么是 console ? console 其实是 JavaScript 内的一个原生对象。内部存储的方法大部…...
Java设计模式-责任链模式
1 概述 在现实生活中,常常会出现这样的事例:一个请求有多个对象可以处理,但每个对象的处理条件或权限不同。例如,公司员工请假,可批假的领导有部门负责人、副总经理、总经理等,但每个领导能批准的天数不同…...
顺序表设计循环队列
使用顺序表来设计队列的最大优势是顺序表有可以定位元素的下标。 并且可以以Mod来使数组下标循环 #include<stdio.h> #include<stdlib.h> #include<assert.h> #include<stdbool.h> typedef int CQDataType; typedef struct { int* array; in…...
UEFI 基础教程 (十四) - 设置默认启动项为UEFI Shell
一 编写源代码 OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.c UINTN BootOptionPriority ( CONST EFI_BOOT_MANAGER_LOAD_OPTION *BootOption ) { DEBUG ((EFI_D_ERROR," [CSDN] BootOptionPriority %S .\n", BootOption->Description)); if (StrCmp (…...
python编程:判断一个数是否是超级素数
请定义一个函数,实现判断一个数是否是超级素数,并输出判断的结果。 一、编程题目 我们都知道,素数是除了1之外只能被自身整数的数,1除外。如果一个素数,去除一位、两位或多位后依然是素数,则我们称该素数为超级素数。…...
雷迪RD8200管线探测仪参数/管线仪使用方法/管线仪说明书
预防损坏和工作效率是我们客户面临的最大挑战 全新的 RD8200可以解决这些问题。这是我们功能优秀的精密管线仪系列,设计时充分考虑了操作员的需要。 预防损坏的专业选择 速度、准确性和可靠的性能 易于设置和使用 阳光下可读的显示屏、高性能的音频系统和用于嘈杂…...
会话共享保存到redis
1. 安装redis服务 [rootdb01 ~]# yum -y install redis 2. 配置redis服务 修改配置文件可以让其他服务器远程连接 127.0.0.1:6379 # 默认只能本地连接 [rootdb01 ~]# vim /etc/redis.conf [rootdb01 ~]# grep 172.16.1.51 /etc/redis.conf bind 127.…...
python 曲线平滑处理——方法总结(Savitzky-Golay 滤波器、make_interp_spline插值法和convolve滑动平均滤波)
文章目录1 插值法对曲线平滑处理1.1 插值法的常见实现方法1.2 拟合和插值的区别1.3 代码实例2 Savitzky-Golay 滤波器实现曲线平滑2.1 问题描述2.2 Savitzky-Golay 滤波器--调用讲解2.3 Savitzky-Golay 曲线平滑处理 示例2.4 Savitzky-Golay原理剖析3 基于Numpy.convolve实现滑…...
小驰私房菜_10_camx Otp Dump
#小驰私房菜# #camx# #Otp Dump# 本篇文章分下面几点展开: 1、otp dump的目的? 2、如何打开otp dump开关? 3、otp guide手册如何查看? 4、如何初步确认dump 出来的数据是否正确? 一、otp dump的目的 关于otp的一些概念,这里就不做过多的介绍了,不了解的同学,可以先去…...
priority_queue(堆)干货归纳+用法示例
10.priority_queue一.priority_queue(堆Heap)简介1.堆的特点:2.使用场景:二.成员函数1.构造函数:priority_queue构造函数方式:2.push()函数:向priority_queue中插入一个元素:3.pop()…...
miniprogram-to-uniapp使用指南(各种小程序项目转换为uni-app项目)
小程序分类:uni-app qq小程序 支付宝小程序 百度小程序 钉钉小程序 微信小程序 小程序转成uni_app 小程序转为uni_app 小程序转uni_app 小程序转换 工具现在支持npm全局库、HBuilderX插件两种方式使用,任君选择,HBuilderX插件地址:…...
BZOJ2720: [Violet 5]列队春游 【概率与期望】
题意自行理解,先讲一下概率和期望怎么算 概率 概率准确的定义自行百度,这里就不赘述了 概率的计算其实很简单,就是将符合条件的情况除以总共的情况 下面以掷骰子为例: 问题:将一个骰子掷出,666朝上的概率是多少 …...
脉诊之脉象——平脉,常见病脉,七绝脉
平脉与病脉诊脉纲领平人脉象常见病脉浮脉沉脉迟脉数脉虚脉实脉涩脉洪脉细脉滑脉弦脉紧脉长脉短脉弱脉芤脉结脉代脉七绝脉釜沸脉鱼翔脉虾游脉屋漏脉雀啄脉解索脉弹石脉预后诊脉纲领 脉跳动的力度:有力者,气足也。无力者,气不足也。 脉…...
第05章_存储引擎
第05章_存储引擎 🏠个人主页:shark-Gao 🧑个人简介:大家好,我是shark-Gao,一个想要与大家共同进步的男人😉😉 🎉目前状况:23届毕业生,目前在某…...
【新2023Q2押题JAVA】华为OD机试 - 挑选字符串
最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧本篇题解:挑选字符串 题目 给定a-z,…...
C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门 多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
