代码编写过程 - 正确率折线图

article/2025/9/24 20:13:11

获取绘图函数

首先,看到需要画acc和loss图。先去参考现成的,于是打开猫12分类,找到生成折线图的地方。
在这里插入图片描述
发现框内的两个函数绘制了折线图。既然是作为函数出现,说明已经有一定的封装,考虑能不能把整个函数搬走用。
由于这个文档是个ipynb文档,没法用Ctrl来看函数定义,所以直接选择Ctrl + f来在网页里查找函数定义的内容。
在这里插入图片描述
找到了,不是库函数,看定义可知这个函数传入两个List型的参数,然后就根据这两个List的内容来绘制一个折线图。而且看起来需要import一个叫plt的东西。
在这里插入图片描述
找到import plt的地方,那么把draw_train_acc复制到自己代码里的时候,还要在前面加上import matplotlib.pyplot as plt
在这里插入图片描述
回到函数这里,现在看一下batchstrain_accs这两个参数里面要装什么东西。
在这里插入图片描述
通过阅读函数调用前对Batchsall_train_accs的修改可以发现,Batchs里面是递增数列,每次递增训练批次的大小,也就是5;all_train_accs里面装的是每批次训练的正确率acc。也就是说传两个整数数列进去就行。
在本地的代码编辑器上实验一下。

import matplotlib.pyplot as pltdef draw_train_acc(Batchs, train_accs):title="training accs"plt.title(title, fontsize=24)plt.xlabel("batch", fontsize=14)plt.ylabel("acc", fontsize=14)plt.plot(Batchs, train_accs, color='green', label='training accs')plt.legend()plt.grid()plt.show()a = [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
b = [0.1, 0.2, 0.3, 0.4, 0.5, 0.9, 0.3, 0.28, 0.01, 0.8]
draw_train_acc(a, b)

在这里插入图片描述
效果可以满足要求。

获得正确率数据

有了绘图函数,现在要找到用来绘图的数据。Batchs没有问题,一个等差数列直接用range()函数生成就行。现在需要找到每次训练的正确率。
在【学习率 优化方法比较】的模型训练部分找到了这么一个函数。

def record(self, epoch_id, trainLossMean, trainAccMean, EvalLossMean, EvalAccMean):if os.path.exists(self.rankPath+'record.csv') is False:init = {"epoch":epoch_id,"train_loss":trainLossMean, 'train_acc':trainAccMean,"eval_loss":EvalLossMean, 'eval_acc':EvalAccMean}df = pd.DataFrame([init])df.to_csv(self.rankPath+'record.csv', index=False)else:df = pd.read_csv(self.rankPath+'record.csv')df.loc[df.index.max() + 1] = [epoch_id, trainLossMean, trainAccMean, EvalLossMean, EvalAccMean]df.to_csv(self.rankPath+'record.csv', index=False)

epoch_id, trainLossMean, trainAccMean, EvalLossMean, EvalAccMean这几个存入了一个叫record.csv的文件。
从项目数据里找到这个文件,打开发现里面就是训练集/验证集的acc/loss。
在这里插入图片描述
发现这个文件有两千多行。仔细观察文件内容和record()函数的代码,发现每训练完一个批次,就会往文件末追加一行。
在这里插入图片描述
再结合这个模型的批次大小是200,训练批次是100,就可以得知训练一轮后record.csv的最后100行是绘图需要的数据。折线图的横坐标应该是每次递增200的等差数列,也就是range(0,20000,200)

现在已经知道了可以直接从文件里读取我们需要的数据,那么就要找怎么读取.csv文件。那就想到,刚刚找到的record()函数里有调用写入.csv文件的函数,那同一个包里应当就有读取.csv文件的函数。
在这里插入图片描述

在这里插入图片描述
发现调用的函数来自pd,那么pandas这个包里面应该就有需要的功能。果断开始百度
在这里插入图片描述

有很多教程,开始找需要的东西。现在需要的是实现“将.csv中某一列数据的最后100项转成List”这个操作。

阅读大量函数ing……

找到两个功能可以用:
在这里插入图片描述
在这里插入图片描述
那么就可以写出代码了。读取record.csv文件,只读取训练正确率这一行,转置为一个Series,用切片语法拿出最后100个数据。

pd.read_csv(".\\rank\\record.csv", usecols=["train_acc"]).squeeze("columns")[-100:]

有个问题,参数需要List,但现在这个东西的类型是Series
直接外面套个list()试试看,如果Series这个类型有向List的转换就能直接转过去。

list(pd.read_csv(".\\rank\\record.csv", usecols=["train_acc"]).squeeze("columns")[-100:])

运行成功了,那么现在用来绘图的正确率列表也已经拿到手了。

组合代码

import pandas as pd
import matplotlib.pyplot as pltdef draw_train_acc(Batchs, train_accs):title="training accs"plt.title(title, fontsize=24)plt.xlabel("batch", fontsize=14)plt.ylabel("acc", fontsize=14)plt.plot(Batchs, train_accs, color='green', label='training accs')plt.legend()plt.grid()plt.show()train_acc = list(pd.read_csv(".\\rank\\record.csv", usecols=["train_acc"]).squeeze("columns")[-100:])draw_train_acc(range(0, 20000, 200), train_acc)

recode.csv下载到本地,在本地先测试一下组合起来的代码,效果不错。
在这里插入图片描述

改进代码

需要画四张图,训练集/验证集 acc/loss 两两组合,对应的折线颜色、折线标注、标题和纵轴坐标都要变化。写四个函数就有点拉了,考虑把这个函数修改修改,要变的东西都提取到参数里。
在这里插入图片描述
观察一下,这几个地方都是会变化的,把它们都提取到函数参数中。
在这里插入图片描述
通过调整color, title, ylabel这三个参数,就可以让要画的四张图都有对应的折线颜色、折线标注、标题和纵轴坐标。

import pandas as pd
import matplotlib.pyplot as pltdef draw_graph(Batchs, train_accs, color, title, ylabel):title = title + ' ' + ylabelplt.title(title, fontsize=24)plt.xlabel("batch", fontsize=14)plt.ylabel(ylabel, fontsize=14)plt.plot(Batchs, train_accs, color=color, label=title)plt.legend()plt.grid()plt.show()train_acc = list(pd.read_csv(".\\rank\\record.csv", usecols=["train_acc"]).squeeze("columns")[-100:])
train_loss = list(pd.read_csv(".\\rank\\record.csv", usecols=["train_loss"]).squeeze("columns")[-100:])
eval_acc = list(pd.read_csv(".\\rank\\record.csv", usecols=["eval_acc"]).squeeze("columns")[-100:])
eval_loss = list(pd.read_csv(".\\rank\\record.csv", usecols=["eval_loss"]).squeeze("columns")[-100:])draw_graph(range(0, 20000, 200), train_acc, color="green", title="train", ylabel="acc")
draw_graph(range(0, 20000, 200), train_loss, color="red", title="train", ylabel="loss")
draw_graph(range(0, 20000, 200), eval_acc, color="green", title="eval", ylabel="acc")
draw_graph(range(0, 20000, 200), eval_loss, color="red", title="eval", ylabel="loss")

这样代码就完成了,效果OK。
在这里插入图片描述


http://chatgpt.dhexx.cn/article/ry1PemXV.shtml

相关文章

李宏毅机器学习课程HW03代码解释

作业3任务是将图片进行分类 从官网上下载数据到data文件里面。此外,将代码分为三个模块,分别是dataset,model以及main。 一、dataset模块 此模块作用是读取图片数据。 重要函数:os.path.join(path,x) 将path和x路径组合在一起 #导入库…

接入友盟厂商push通道遇到的坑

目录 调试友盟Push问题的检查清单 客户端、服务端数据协议 客户端接入方式 小米厂商通道 华为厂商通道 魅族厂商通道 VIVO厂商通道 OPPO厂商通道 支持桌面角标的厂商 吐槽一下集成友盟厂商通道时发现的问题 调试友盟Push问题的检查清单 过滤UmengPushAgent开头的日志…

Android集成友盟消息推送SDK

消息推送SDK快速集成: 申请AppKey ——> 接入Push SDK ——> 基础接口引入 ——> 消息推送测试 ——> 接入完成 1.申请AppKey 2.接入Push SDK 1)、加入依赖 //友盟push相关依赖(必须)implementationcom.umeng.umsdk:push:6.1.0impleme…

机器学习之手写决策树以及sklearn中的决策树及其可视化

文章目录 决策树理论部分基本算法划分选择信息熵 信息增益信息增益率基尼系数基尼指数 决策树代码实现参考 决策树理论部分 决策树的思路很简单,就是从数据集中挑选一个特征,然后进行分类。 基本算法 从伪代码中可以看出,分三种情况考虑&…

android使用友盟推送注册失败获取不到token accs bindapp error!

使用友盟推送注册失败获取不到token public void onFailure(String s, String s1)的值分别是“-9”和“accs bindapp error!”或者s的值为-11.都是同一个问题 就是主工程(除友盟PushSDK 其他的module均看成为主工程)so目录与PushSDK下的so目录不一致…

同时集成阿里云旺与友盟推送,初始化失败s:-11,s1:accs bindapp error!的解决办法

在应用中需要同时集成聊天和推送功能,聊天选用阿里的sdk(百川云旺),推送选用友盟的pushSDK。 这时候悲剧就出现了,注册友盟的时候报错。 I/com.umeng.message.PushAgent: register-->onFailure-->s:-11,s1:accs …

关于友盟s=-11;s1=accs bindapp error!的解决处理

项目使用了友盟推送之后,在部分手机上出现accs bindapp error,错误码-11的问题,为什么会出现这个问题呢,网上查找了很久,友盟给出的解释是so文件不正确。 具体链接:http://bbs.umeng.com/thread-23018-1-1…

友盟register failed: -11 accs bindapp error!

下载官方Demo后,替换自己的id包名后出现 register failed: -11 accs bindapp error! 经过一番搜索之后,都是说这二种原因 1、检查appkey和secret key是否配置正确,如果正确无误,请看步骤2。2、so文件配置有误,需重新配置: Pus…

阿里无线11.11 | 手机淘宝移动端接入网关基础架构演进之路

移动网络优化是超级App永恒的话题,对于无线电商来说更为重要,网络请求体验跟用户的购买行为息息相关,手机淘宝从过去的HTTP API网关,到2014年升级支持SPDY,2015年双十一自研高性能、全双工、安全的ACCS(阿里…

VS2015 realease模式下调试

一、将项目属性设置为Release,生成--->配置管理器: 二、按AltF7,弹出属性页进行设置:

AndroidStudio如何打包生成realease版本的arr包,并上传到Nexus搭建的maven仓库,供项目远程依赖(二)

AndroidStudio如何打包生成realease版本的arr包,并上传到Nexus搭建的maven仓库,供项目远程依赖(二) AndroidStudio如何打包生成realease版本的arr包,并上传到Nexus搭建的maven仓库,供项目远程依赖&#xff…

AndroidStudio如何打包生成realease版本的arr包,并上传到Nexus搭建的maven仓库,供项目远程依赖(一)

AndroidStudio如何打包生成realease版本的arr包,并上传到Nexus搭建的maven仓库,供项目远程依赖(一) 背景: 公司之前在eclipse上做开发,写了很多library库供项目依赖使用,现在转AS上了,并用Nexu…

QT debug 功能正常 realease和windeplayqt工具打包部分功能无法使用或者不正常

目录 说明开发环境错误说明结论 说明 在项目的开发中,一般程序员都是使用debug版本进行程序的编写和调试,习惯好一些的程序员可能会天天用realease跑一遍自己写的程序是否正常,但是很多程序员可能都不会这么做,直到程序功能完成时…

Python OpenCV10:OpenCV 视频基本操作

1. 读视频 1.1 获取视频对象 要在 OpenCV 中获取视频,需要创建一个 VideoCapture 对象并指定要读取的视频文件。 cv.VideoCapture(filepath) 参数: filepath 视频文件路径 返回值: cap 读取视频的对象 1.2 获取视频属性 cap.get(propId) 获…

Renderers

渲染器 (Renderers) 在将 TemplateResponse 实例返回给客户端之前,必须渲染它。渲染过程采用模板和上下文的中间表示,并将其转换为可以提供给客户端的最终字节流。—— Django 文档 REST framework 包含许多内置的渲染器 (Renderer) 类,允许…

python调用opencv实现视频读写

文章目录 一、从文件中读取视频并播放1.1 基本API讲解1.2 python实现 二、保存视频2.1 基本API讲解2.1 python实现范例 一、从文件中读取视频并播放 1.1 基本API讲解 在OpenCV中我们要获取一个视频,需要创建一个VideoCapture对象,指定你要读取的视频文…

记一次有趣的debug,VS编译器上Debug和Realease的差异

之前自己写过一个imageread的函数,用了好久一直没问题。最近两天,同事让我realease一个项目给他,其中就包含了我自己写的imageread函数。 我的函数就长这样,不包含公司的code,不算泄密哈。 在realse之前,我…

C++语言基础篇

✅作者简介:CSDN内容合伙人,全栈领域新星创作者,阿里云专家博主,华为云云享专家博主,掘金后端评审团成员 💕前言: 学长出的这一系列专栏适合有⼀点 C 基础&#xff0c…

PCL12.1 Realease 附加依赖项

PCL12.1 Realease 附加依赖项 libboost_atomic-vc142-mt-g-x64-1_78.lib libboost_bzip2-vc142-mt-g-x64-1_78.lib libboost_chrono-vc142-mt-g-x64-1_78.lib libboost_container-vc142-mt-g-x64-1_78.lib libboost_context-vc142-mt-g-x64-1_78.lib libboost_contract-vc142-…

Vue强制刷新页面重新加载数据方法

业务场景 在管理后台执行完增删改查的操作之后,需要重新加载页面刷新数据以便页面数据的更新 实现原理 就是通过控制router-view 的显示与隐藏,来重渲染路由区域,重而达到页面刷新的效果,show -> flase -> show 具体代码…