在 GitHub 上编辑

可视化图表

DVC 可以基于项目中的数据生成并渲染图表。典型的工作流程如下:

  1. 保存图表数据并定义如何可视化图表。最简单的方法是使用DVCLive,它会自动为你保存数据并定义图表。

  2. 运行实验比较生成的图表(下图使用了VS Code 扩展)。

    guide plots intro compare

支持的图表文件格式

要创建有效的图表文件,你可以:

  • 在 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 子命令可以为指定的一列或多列生成图表。例如,epochlossaccuracy 是下面示例中的列名:

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 文件中定义图表。

点击播放即表示您同意 YouTube 的 隐私政策服务条款

该扩展不仅可以定义图表,还能简化图表调试过程。

点击播放即表示您同意 YouTube 的 隐私政策服务条款

你也可以手动编辑 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)。
  • 指定一个或多个列作为 xfpr)和 ytpr)轴。
  • 将一个或多个数据源(evaluation/train/plots/roc.jsonevaluation/test/plots/roc.json)指定为 xy 轴的键。
  • 指定任何其他可用的配置字段(titletemplatex_labely_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 showdvc 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] 与他人共享结果。

plots compare vs code

你可以使用dvc plots diff 来比较不同实验的图表。

$ dvc plots diff $(dvc exp list --name-only)

plots diff

VS Code 的 DVC 扩展中,你可以在Plots 视图中进行比较。

VS Code Comparison

一旦你将结果共享到 DVC Studio,就可以针对整个仓库历史记录比较实验:

DVC Studio view

内容

🐛 发现问题?告诉我们!或者修复它:

在 GitHub 上编辑

有疑问?加入我们的聊天,我们会为您提供帮助:

Discord 聊天