Retrieves DVC experiments tracked in a repository. Without arguments, this function retrieves all experiments derived from the Git HEAD.This function provides programmatic access to experiment data, including parameters, metrics, and metadata, making it easy to analyze, compare, and report on experiments.
import dvc.api# Show experiments from last 5 commitsexperiments = dvc.api.exp_show(num=5)print(f"Found {len(experiments)} experiments across 5 commits")
import dvc.api# Get experiments from development branchdev_experiments = dvc.api.exp_show(revs="development")# Get experiments from main branchmain_experiments = dvc.api.exp_show(revs="main")print(f"Development: {len(dev_experiments)} experiments")print(f"Main: {len(main_experiments)} experiments")
import dvc.apiimport matplotlib.pyplot as pltexperiments = dvc.api.exp_show()# Extract learning rate vs accuracylr_values = [exp.get("params.train.lr") for exp in experiments]accuracy_values = [exp.get("metrics.accuracy") for exp in experiments]# Filter out None valuesdata = [(lr, acc) for lr, acc in zip(lr_values, accuracy_values) if lr and acc]lr_values, accuracy_values = zip(*data)plt.scatter(lr_values, accuracy_values)plt.xlabel("Learning Rate")plt.ylabel("Accuracy")plt.title("Learning Rate vs Accuracy")plt.xscale("log")plt.show()
import dvc.api# Show only parameters that are stage dependenciesexperiments = dvc.api.exp_show(param_deps=True)for exp in experiments: print(f"\nExperiment: {exp['Experiment']}") # Only dependency params will be included for key, value in exp.items(): if key.startswith("params."): print(f" {key}: {value}")
import dvc.apiexperiments = dvc.api.exp_show(num=-1)# Multi-criteria selectioncandidates = [ exp for exp in experiments if exp.get("metrics.accuracy", 0) > 0.90 and exp.get("metrics.training_time", float('inf')) < 300]best = max(candidates, key=lambda x: x["metrics.f1_score"])print(f"Selected: {best['Experiment']}")
Track experiment progress
Monitor running experiments:
import dvc.apiimport timewhile True: experiments = dvc.api.exp_show(force=True) running = [e for e in experiments if e.get("State") == "Running"] queued = [e for e in experiments if e.get("State") == "Queued"] print(f"Running: {len(running)}, Queued: {len(queued)}") if not running and not queued: break time.sleep(60) # Check every minute
Compare against baseline
Always maintain and compare against a baseline:
import dvc.apiexperiments = dvc.api.exp_show()# Find baseline (usually the commit without experiment name)baseline = next((e for e in experiments if not e.get("Experiment")), None)if baseline: for exp in experiments: if exp.get("Experiment"): acc_diff = exp.get("metrics.accuracy", 0) - baseline.get("metrics.accuracy", 0) print(f"{exp['Experiment']}: {acc_diff:+.4f} vs baseline")
Handle missing values
Experiments may have different metrics/parameters:
import dvc.apiexperiments = dvc.api.exp_show()for exp in experiments: # Safe access with .get() accuracy = exp.get("metrics.accuracy") if accuracy is not None: print(f"{exp.get('Experiment', 'baseline')}: {accuracy:.4f}") else: print(f"{exp.get('Experiment', 'baseline')}: No accuracy metric")
import dvc.apiimport mlflowexperiments = dvc.api.exp_show()for exp in experiments: with mlflow.start_run(run_name=exp.get("Experiment")): # Log metrics for key, value in exp.items(): if key.startswith("metrics.") and isinstance(value, (int, float)): mlflow.log_metric(key.replace("metrics.", ""), value) # Log parameters for key, value in exp.items(): if key.startswith("params."): mlflow.log_param(key.replace("params.", ""), value)