可视化图表
DVC 可以基于项目中的数据生成并渲染图表。典型的工作流程如下:
-
运行实验并比较生成的图表(下图使用了VS Code 扩展)。
支持的图表文件格式
要创建有效的图表文件,你可以:
- 在 Python 代码中使用DVCLive,将数据以 DVC 兼容的格式自动记录下来。
- 自行生成 JSON、YAML 1.2、CSV 或 TSV 格式的数据序列文件。
- 保存 JPEG、GIF、PNG 或 SVG 图像文件,以便直接在报告中渲染(适用于那些在 DVC 中难以配置的自定义可视化图表)。
DVC 将图表生成为静态 HTML 网页,你可以用浏览器打开,或通过 DVC 扩展中的图表仪表板在 VS Code 中查看。(可从该界面将图表另存为 SVG 或 PNG 图像文件。)
对于数据序列类图表,DVC 期望文件中包含一个或多个对象数组(通常是浮点数)。这些图表使用Vega-Lite(一种用于定义图形的声明式语法)进行渲染。
表格数据
在表格格式文件(CSV 和 TSV)中,每一列代表一个数组。dvc plots
子命令可以为指定的一列或多列生成图表。例如,epoch
、loss
和 accuracy
是下面示例中的列名:
epoch,loss,accuracy
1,0.19,0.81
2,0.11,0.89
3,0.07,0.93
4,0.04,0.96
你可以配置 DVC 如何可视化数据(参见dvc plots show
):
$ dvc plots show logs.csv -x epoch -y loss
file:///Users/usr/src/dvc_plots/index.html
分层数据
分层格式文件(JSON 和 YAML)应包含结构一致的对象数组(具有相同的结构):所有对象都应包含用于图表 X 轴和 Y 轴的字段(参见DVC 模板锚点);多余的元素将被静默忽略。
dvc plots
子命令可以从数组对象中为指定的一个或多个字段生成图表。例如,loss
是下面 train
数组中某个对象的字段名之一:
{
"train": [
{ "accuracy": 0.96658, "loss": 0.10757 },
{ "accuracy": 0.97641, "loss": 0.07324 },
{ "accuracy": 0.87707, "loss": 0.08136 },
{ "accuracy": 0.87402, "loss": 0.09026 },
{ "accuracy": 0.8795, "loss": 0.0764 },
{ "accuracy": 0.88038, "loss": 0.07608 },
{ "accuracy": 0.89872, "loss": 0.08455 }
]
}
你可以配置 DVC 如何可视化数据(参见dvc plots show
):
$ dvc plots show train.json -y loss
file:///Users/usr/src/dvc_plots/index.html
定义图表
为了创建可视化图表,用户需要提供数据以及(可选的)配置信息,以帮助在 dvc.yaml
文件中自定义图表。如果你正在使用DVCLive,它会自动配置图表,但你也可以添加自己的自定义图表。最简便的方式是使用VS Code 的 DVC 扩展在你的 dvc.yaml
文件中定义图表。
该扩展不仅可以定义图表,还能简化图表调试过程。
你也可以手动编辑 dvc.yaml
来配置图表,如下所示:
plots:
# Data series source
- eval/live/plots/sklearn/cm/test.json:
# Configure template and axes.
template: confusion
x: actual
y: predicted
# Multiple data sources
- ROC:
x: fpr
y:
eval/live/plots/sklearn/roc/train.json: tpr
eval/live/plots/sklearn/roc/test.json: tpr
# Image file source
- eval/importance.png
# Directory of images or data sources
- eval/misclassified_examples
在最简单的使用场景中,你只需提供图表文件的路径。在以下示例中,DVC 将从 logs.csv
中提取数据,并使用默认的绘图行为(对最后一个找到的列应用 linear
图表模板):
plots:
- logs.csv
$ dvc plots show
file:///Users/usr/src/dvc_plots/index.html
如需自定义,我们可以:
- 使用一个非文件路径的图表 ID(如
ROC
)。 - 指定一个或多个列作为
x
(fpr
)和y
(tpr
)轴。 - 将一个或多个数据源(
evaluation/train/plots/roc.json
和evaluation/test/plots/roc.json
)指定为x
和y
轴的键。 - 指定任何其他可用的配置字段(
title
、template
、x_label
、y_label
)。
plots:
- ROC:
x: fpr
y:
evaluation/train/plots/roc.json: tpr
evaluation/test/plots/roc.json: tpr
title: Train vs. Test ROC
x_label: False Positive Rate
y_label: True Positive Rate
$ dvc plots show
file:///Users/usr/src/dvc_plots/index.html
更多详情请参考完整格式说明以及dvc plots show
。
绘图模板(仅限数据序列)
DVC 使用Vega-Lite JSON 规范从用户数据创建图表,并内置了一组绘图模板。
linear
模板是默认模板。可通过dvc plots show
和 dvc plots diff
的 --template
(-t
)选项更改。传递给 --template
的参数可以是(内置)模板名称,也可以是指向自定义模板的路径。
对于存储在 .dvc/plots
中的模板(自定义模板的默认位置),无需提供路径和 json 扩展名:只需指定基础名称即可,例如 --template scatter
。
DVC 提供以下内置绘图模板:
linear
- 基础线性图,包含光标交互功能(默认)simple
- 最简单的线性模板(无交互);适合作为创建自定义模板的基础。scatter
- 散点图smooth
- 带有 LOESS 平滑的线性图,参见示例confusion
- 混淆矩阵,参见示例confusion_normalized
- 数值归一化到 <0, 1> 范围的混淆矩阵bar_horizontal
- 水平条形图,参见示例bar_horizontal_sorted
- 按条形大小排序的水平条形图
注意,对于 CSV/TSV 指标文件,表头(第一行)中的列名等同于字段名。
有关如何基于预定义模板创建自己的模板,请参考dvc plots templates
。
比较图表
当你运行实验或以其他方式更新图表文件中的数据时,这些更新将自动反映在你的可视化图表中。要在实验之间或 Git 版本之间进行比较,你可以使用dvc plots diff
、来自VS Code 扩展的图表仪表板,或 [DVC Studio] 与他人共享结果。
在VS Code 的 DVC 扩展中,你可以在Plots
视图中进行比较。
一旦你将结果共享到 DVC Studio,就可以针对整个仓库历史记录比较实验: