Skip to content

实验追踪

实验跟踪几乎是机器学习中不可或缺的一部分。它在维护可重复性方面至关重要。PyTorch Tabular 秉承这一点,并在内部支持实验跟踪。目前,PyTorch Tabular 支持两种实验跟踪框架:

  1. Tensorboard
  2. Weights and Biases

Tensorboard 日志记录非常基础。PyTorch Tabular 只是将损失和指标记录到 Tensorboard 中。W&B 跟踪功能更为丰富——除了跟踪损失和指标外,它还可以跟踪不同层的梯度、模型在各个时期的输出等。

基本用法

  • project_name: str: 所有运行日志的项目名称。对于 Tensorboard,这定义了日志保存的文件夹,而对于 W&B,它定义了项目名称。
  • run_name: str: 运行的名称;用于识别特定运行的标识符。如果留空,将根据任务自动生成一个名称。
  • log_target: str: 确定日志记录的位置——Tensorboard 或 W&B。选项有:wandb tensorboard。默认为 tensorboard

使用示例

experiment_config = ExperimentConfig(project_name="MyAwesomeProject", run_name="my_cool_new_model", log_target="wandb")

高级用法

跟踪梯度

跟踪梯度以监控模型是否按预期学习是一个好主意。有两种方法可以做到这一点。

  1. ExperimentConfig 中将 exp_watch 参数设置为 "gradients",并将 log_target 选择为 "wandb"。这将跟踪各个时期的梯度直方图。

梯度直方图

  1. 你还可以将 track_grad_norm 设置为 12,以跟踪梯度的 L1 或 L2 范数。这对 Tensorboard 和 W&B 都适用。

梯度范数

跟踪输出

有时,跟踪模型的输出也有助于分析。随着训练的进行,输出应该变得更加明显或集中在我们试图建模的目标周围。

这可以通过在 ExperimentConfig 中使用 log_logits 参数来实现。

输出日志

pytorch_tabular.config.ExperimentConfig dataclass

实验配置.使用 WandB 和 Tensorboard 进行实验跟踪.

Parameters:

Name Type Description Default
project_name str

所有运行日志所属的项目名称.对于 Tensorboard,这定义了日志保存的文件夹, 对于 W&B,这定义了项目名称.

MISSING
run_name Optional[str]

运行的名称;用于识别该运行的特定标识符.如果留空,将自动生成一个名称.

None
exp_watch Optional[str]

所需的日志记录级别.可以是 gradientsparametersallNone. 默认为 None.可选值为:[gradients, parameters, all, None].

None
log_target str

确定日志记录发生的位置 - Tensorboard 或 W&B.可选值为:[wandb, tensorboard].

'tensorboard'
log_logits bool

开启此选项以在 W&B 中将 logits 记录为直方图.

False
exp_log_freq int

记录梯度和参数的步数间隔.

100
Source code in src/pytorch_tabular/config/config.py
@dataclass
class ExperimentConfig:
    """实验配置.使用 WandB 和 Tensorboard 进行实验跟踪.

    Args:
        project_name (str): 所有运行日志所属的项目名称.对于 Tensorboard,这定义了日志保存的文件夹,
                对于 W&B,这定义了项目名称.

        run_name (Optional[str]): 运行的名称;用于识别该运行的特定标识符.如果留空,将自动生成一个名称.

        exp_watch (Optional[str]): 所需的日志记录级别.可以是 `gradients`、`parameters`、`all` 或 `None`.
                默认为 None.可选值为:[`gradients`, `parameters`, `all`, `None`].

        log_target (str): 确定日志记录发生的位置 - Tensorboard 或 W&B.可选值为:[`wandb`, `tensorboard`].

        log_logits (bool): 开启此选项以在 W&B 中将 logits 记录为直方图.

        exp_log_freq (int): 记录梯度和参数的步数间隔."""

    project_name: str = field(
        default=MISSING,
        metadata={
            "help": "The name of the project under which all runs will be logged."
            " For Tensorboard this defines the folder under which the logs will be saved"
            " and for W&B it defines the project name"
        },
    )

    run_name: Optional[str] = field(
        default=None,
        metadata={
            "help": "The name of the run; a specific identifier to recognize the run."
            " If left blank, will be assigned a auto-generated name"
        },
    )
    exp_watch: Optional[str] = field(
        default=None,
        metadata={
            "help": "The level of logging required.  Can be `gradients`, `parameters`, `all` or `None`."
            " Defaults to None",
            "choices": ["gradients", "parameters", "all", None],
        },
    )

    log_target: str = field(
        default="tensorboard",
        metadata={
            "help": "Determines where logging happens - Tensorboard or W&B",
            "choices": ["wandb", "tensorboard"],
        },
    )
    log_logits: bool = field(
        default=False,
        metadata={"help": "Turn this on to log the logits as a histogram in W&B"},
    )

    exp_log_freq: int = field(
        default=100,
        metadata={"help": "step count between logging of gradients and parameters."},
    )

    def __post_init__(self):
        _validate_choices(self)
        if self.log_target == "wandb":
            try:
                import wandb  # noqa: F401
            except ImportError:
                raise ImportError(
                    "No W&B installation detected. `pip install wandb` to install W&B if you set log_target as `wandb`"
                )