在 GitHub 上编辑

查看和比较实验

一旦你保存了多个实验,DVC 提供了命令来查看、比较和管理这些实验。让我们看看它们如何帮助你简化实验流程。

显示实验表格

实验的本质是在生成大量可能性后选择其中少数几个。你可以获得一个实验表格,以格式化的方式展示所有指标(黄色)、参数(蓝色)和依赖项(紫色)。

$ dvc exp show
 ────────────────────────────────────────────────────────────────────────────────────────────────────────────────
  neutral:**Experiment**              neutral:**Created**            metric:**loss**      metric:**acc**   param:**train.epochs**   param:**model.conv_units**   dep:**src**       dep:**data**
 ────────────────────────────────────────────────────────────────────────────────────────────────────────────────
  workspace               -               0.03332   0.9888   10             16                 695e061   6875529
  baseline-experiment     Jan 14, 2022    0.03332   0.9888   10             16                 695e061   6875529
  ├── 38d6c53 [cnn-64]    Jan 19, 2022   0.038246    0.988   10             64                 c77a505   6875529
  └── bc0faf5 [cnn-128]   Jan 19, 2022   0.038325    0.989   10             128                bc75d6a   6875529
 ────────────────────────────────────────────────────────────────────────────────────────────────────────────────

dvc exp show 仅列出工作区和 HEAD 中的实验。你可以使用 --all-commits (-A) 参数来显示项目中的所有实验。

VS Code 的 DVC 扩展中选择“显示实验”操作。

VS Code Show Experiments

自定义实验表格

如果你有大量指标、参数和依赖项,表格输出可能会显得杂乱。DVC 提供了多种选项来选择要在表格中显示的列。

例如,dvc exp show --only-changed 将移除那些在各实验之间值没有变化的列:

$ dvc exp show --only-changed
 ───────────────────────────────────────────────────────────────────────────────
  neutral:**Experiment**              neutral:**Created**            metric:**loss**      metric:**acc**    param:**model.conv_units**
 ───────────────────────────────────────────────────────────────────────────────
  workspace               -               0.03332   0.9888    16
  baseline-experiment     Jan 14, 2022    0.03332   0.9888    16
  ├── 38d6c53 [cnn-64]    Jan 19, 2022   0.038246    0.988    64
  └── bc0faf5 [cnn-128]   Jan 19, 2022   0.038325    0.989    128
 ───────────────────────────────────────────────────────────────────────────────

更多关于如何过滤列、排序行以及自定义表格的示例,请参见 dvc exp show 参考文档

你可以在 VS Code 的 DVC 扩展中的“显示实验”操作里隐藏或移动列,并对行进行过滤。

VS Code Customize Table

你也可以在该扩展中对实验和提交的行进行排序。

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

访问实验表格的其他方式

如果仅查看表格还不够,你需要以编程方式访问实验表格,可以将其保存为 CSV 文件,或通过 Python API 进行访问。

dvc exp show 还可以通过 --csv 参数将表格输出为 CSV 格式,包含表格中的所有数据。

$ dvc exp show --csv
Experiment,rev,typ,Created,parent,loss,acc,train.epochs,model.conv_units
,workspace,baseline,,,0.236574187874794,0.9126999974250793,10,16
baseline-experiment,23ceb4a,baseline,2021-09-06T23:38:07,,0.236574187874794,0.9126999974250793,10,16
cnn-64,6d13f33,branch_commit,2021-09-09T13:06:05,,0.2338544875383377,0.9153000116348267,10,64
cnn-128,69503c6,branch_commit,2021-09-09T12:53:51,,0.2324332743883133,0.9160000085830688,10,128

例如,让我们使用 csvkit 解析 CSV 输出,以获得关于实验的统计摘要:

$ dvc exp show --csv | csvstat
...
7. "acc"

        Type of data:          Number
        Contains null values:  False
        Unique values:         5
        Smallest value:        0.9127
        Largest value:         0.9167
        Sum:                   5.4895
        Mean:                  0.914917
        Median:                0.91565
        StDev:                 0.001774
        Most common values:    0.9127 (2x)
                               0.9167 (1x)
                               0.9153 (1x)
                               0.9161 (1x)
                               0.916 (1x)
...

实验表格也可通过 DVC 的 Python API 获得:

import dvc.api

exps = dvc.api.exp_show()

这将返回一个字典列表,每个字典代表一个实验:

[
  {
    "Experiment": "paled-acre",
    "rev": "883442c",
    "Created": "Apr 19, 2023",
    "dice_multi": 0.8590125166103912,
    "train.arch": "squeezenet1_1"
  },
  {
    "Experiment": "vocal-suer",
    "rev": "231e504",
    "Created": "Apr 19, 2023",
    "dice_multi": 0.8997336177828745,
    "train.arch": "resnet34"
  },
  {
    "Experiment": "banal-hogs",
    "rev": "ff4a08a",
    "Created": "Apr 19, 2023",
    "dice_multi": 0.8758231459806097,
    "train.arch": "alexnet"
  }
]

dvc.api.exp_show() 返回的格式可直接转换为 Pandas DataFrame

import dvc.api
import pandas as pd

df = pd.DataFrame(dvc.api.exp_show())

比较图表

实验表格用于比较标量参数和指标。你还可以从每次实验中保存图表数据,并将不同实验的图表叠加起来进行比较。图表可以包括指标趋势、非标量数据(如 ROC 曲线或直方图),以及用于比较的静态图像。了解更多关于可视化图表的信息,并参考以下示例了解如何在实验之间比较图表。

你可以使用 dvc plots diff 来比较不同实验之间的图表。要获取待比较实验的名称,可使用 dvc exp list --name-only,它将返回 HEAD 中所有实验的名称。查看 dvc exp list 的选项以选择不同的实验集合。

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

plots diff

VS Code 的 DVC 扩展 中,选择表格中的任意实验以绘制图表。

VS Code Compare Plots

将实验结果带回你的工作区

若要查看超出表格或图表所展示内容的实验细节(例如检查代码或数据变更),可将先前实验的结果恢复至你的工作区。

⚠️ 工作区中的冲突更改将被覆盖,但这些更改可以被恢复

$ dvc exp apply ochre-dook
Changes for experiment 'ochre-dook' have been applied...

你可以在 VS Code 的 DVC 扩展 中将任意实验的结果应用到工作区。

VS Code Apply Experiment

你可以使用标准 Git 命令(例如 git add/commit/push)将此实验直接持久化保存到仓库中。由 DVC 跟踪的数据和产物已存在于 DVC 缓存中,其余部分(参数、代码和配置文件等)可存储在 Git 中。

请注意,你需要执行 dvc push 才能共享或备份 DVC 缓存的内容。

在工作区外进行比较

上述方法允许你在本地机器上无需任何服务器、登录或基础设施即可比较实验。然而,有时你可能无法使用自己的设备,或希望与他人共享结果。DVC Studio 提供了一个网页协作中心,用于共享实验,并可视化和比较整个项目历史中的实验。

DVC Studio Compare Experiments Overview

删除实验

尽管 DVC 占用极少资源来跟踪实验,但它们可能会使表格和工作区变得杂乱。当你想根据名称丢弃某些实验时,可以将其删除。

使用 dvc exp remove 并提供实验名称。

$ dvc exp list
main:
    2399f24 [cnn-128]
    4e8a178 [cnn-32]
    f1edf21 [cnn-64]
$ dvc exp remove cnn-32 cnn-64
Removed experiments: cnn-32,cnn-64

查看 dvc exp remove 的选项,了解如何选择多个实验进行批量删除。

你可以在 VS Code 的 DVC 扩展 中删除任意数量的实验。

VS Code Remove Experiments

删除实验不会删除 DVC 缓存中的任何对象。若要清除与实验相关的缓存对象(例如模型文件、中间产物等),可使用 dvc gc

内容

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

在 GitHub 上编辑

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

Discord 聊天