查看和比较实验
一旦你保存了多个实验,DVC 提供了命令来查看、比较和管理这些实验。让我们看看它们如何帮助你简化实验流程。
显示实验表格
实验的本质是在生成大量可能性后选择其中少数几个。你可以获得一个实验表格,以格式化的方式展示所有指标(黄色)、参数(蓝色)和依赖项(紫色)。
$ dvc exp show
────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Experiment Created loss acc train.epochs model.conv_units src 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 扩展中选择“显示实验”操作。
自定义实验表格
如果你有大量指标、参数和依赖项,表格输出可能会显得杂乱。DVC 提供了多种选项来选择要在表格中显示的列。
例如,dvc exp show --only-changed
将移除那些在各实验之间值没有变化的列:
$ dvc exp show --only-changed
───────────────────────────────────────────────────────────────────────────────
Experiment Created loss acc 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
参考文档。
访问实验表格的其他方式
如果仅查看表格还不够,你需要以编程方式访问实验表格,可以将其保存为 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)
在 VS Code 的 DVC 扩展 中,选择表格中的任意实验以绘制图表。
将实验结果带回你的工作区
若要查看超出表格或图表所展示内容的实验细节(例如检查代码或数据变更),可将先前实验的结果恢复至你的工作区。
⚠️ 工作区中的冲突更改将被覆盖,但这些更改可以被恢复。
$ dvc exp apply ochre-dook
Changes for experiment 'ochre-dook' have been applied...
你可以在 VS Code 的 DVC 扩展 中将任意实验的结果应用到工作区。
你可以使用标准 Git 命令(例如 git add/commit/push
)将此实验直接持久化保存到仓库中。由 DVC 跟踪的数据和产物已存在于 DVC 缓存中,其余部分(参数、代码和配置文件等)可存储在 Git 中。
请注意,你需要执行
dvc push
才能共享或备份 DVC 缓存的内容。
在工作区外进行比较
上述方法允许你在本地机器上无需任何服务器、登录或基础设施即可比较实验。然而,有时你可能无法使用自己的设备,或希望与他人共享结果。DVC Studio 提供了一个网页协作中心,用于共享实验,并可视化和比较整个项目历史中的实验。
删除实验
尽管 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 扩展 中删除任意数量的实验。
删除实验不会删除 DVC 缓存中的任何对象。若要清除与实验相关的缓存对象(例如模型文件、中间产物等),可使用 dvc gc
。