大修了一波bug,终于有时间来码字辣。之前写的太乱了,这个工具的初衷是通过混淆矩阵进行模型的诊断,毕竟除了loss以外,大部分的性能都可以从混淆矩阵导出。而将混淆矩阵的序列进行可视化,有助于得到对模型变化更直观的认识。
我们提供了三种分析的工具:混淆矩阵(热图):用于观察混淆矩阵随Epoch的变化
2. 模型性能:Accuracy, Precision, Recall, F1 Score (即Dice score) 随Epoch的变化(即常规的训练进程图),包括整体性能(各类别平均),以及每个类别的性能(against all others class)
3. FP/FN 散点图:用于分析模型的错误倾向,并支持显示随时间的演化
如果你对这个小工具感兴趣,欢迎check:jiaoyiping630/Confusion_Visualizationgithub.com
使用几行简单的指令,即可得到如上演示的效果:
train_confusion_path = './confusion_example/confusions_train.pkl'
valid_confusion_path = './confusion_example/confusions_validate.pkl'
from pinglib.interactive.confusion_visualization import Confusion_Visualization
conf_visual = Confusion_Visualization(train_confusion_path, valid_confusion_path)
后面的内容 之 写在前面:
我相信已经有许多更优秀的可视化工具,我并没有做广泛的比较,而是只从用过的lib开始,主要是也很享受这样build from scratch(并不)的过程。交互式图表本身是一件很有意义的事情,让你能够打造更趁手的小工具,事实上由于Matplotlib的并不易用性,我也发现很多道友也在问同样的问题。
为了制作这个工具,从一个小白开始,经历了各种搜索查阅,try and error,花费了不少的时间。所以我想将其中的要点记录下来,作为一个Matplotlib交互图表的入门笔记,以对得起这个盛夏的蜗居周末,也许还能够让后来者更方便查阅。但显然,内容会零碎的多。
1. 将对象绘制在指定的Figure与Axes上
通常我们会使用plt.imshow(), plt.scatter(), plt.plot() 这样的指令进行绘图,但对于复杂的图表这并不能进行精细的控制。从我个人的理解,绘图的对象(也许)包含三个层次:Figure -> Axes -> Object。
为什么要有这样复杂的设计呢?Figure相当于打开的一个窗口/画板,Axes则是在窗口中的一个区域/画纸(例如subplot),而Plot、Scatter这样的对象/内容,是绘制在某个特定的区域的。一个画板上当然可以铺好几张纸,每一张纸上,当然可以画好多个东西,大概是这种逻辑。
首先是Figure,这相当于是一个画板&#x