1

validation_step()在 PyTorch Lighting 中记录我的验证丢失时,如下所示:

def validation_step(self, batch: Tuple[Tensor, Tensor], _batch_index: int) -> None:
    inputs_batch, labels_batch = batch

    outputs_batch = self(inputs_batch)
    loss = self.criterion(outputs_batch, labels_batch)

    self.log('loss (valid)', loss.item())

然后,我得到一个时代损失曲线:

在此处输入图像描述

如果我想要逐步损失曲线,我可以设置on_step=True

def validation_step(self, batch: Tuple[Tensor, Tensor], _batch_index: int) -> None:
    inputs_batch, labels_batch = batch

    outputs_batch = self(inputs_batch)
    loss = self.criterion(outputs_batch, labels_batch)

    self.log('loss', loss.item(), on_step=True)

这导致每个时期的逐步损失曲线:

在此处输入图像描述

我怎样才能得到所有时期的单一图表呢?当我进行数千个 epoch 的训练时,这会变得一团糟。

4

1 回答 1

1

似乎您在初始化记录器时做错了什么。是否定义如下:

logger = TensorBoardLogger("tb_logs", name="my_model")

请注意,这on_step将修改您的标签,这是它们显示为单独图像的原因之一。

您可以使用以下命令代替使用 on_step:

self.logger.experiment.add_scalar('name',metric)

如果您希望绘图 x 轴显示纪元数而不是步数,您可以将记录器放置在validation_epoch_end(self, outputs).

def validation_epoch_end(self, outputs):
   avg_loss = torch.stack([x["val_loss"] for x in outputs]).mean()
   self.logger.experiment.add_scalar('loss',avg_loss, self.current_epoch)
于 2021-02-21T20:53:45.003 回答