【问题标题】:PyTorch Lightning training console output is weirdPyTorch Lightning 训练控制台输出很奇怪
【发布时间】:2022-01-02 12:06:38
【问题描述】:

在 Jupyter Notebook 中训练 PyTorch Lightning 模型时,控制台日志输出很尴尬:

Epoch 0: 100%|█████████▉| 2315/2318 [02:05<00:00, 18.41it/s, loss=1.69, v_num=26, acc=0.562]
Validating: 0it [00:00, ?it/s]
Validating:   0%|          | 0/1 [00:00<?, ?it/s]
Epoch 0: 100%|██████████| 2318/2318 [02:09<00:00, 17.84it/s, loss=1.72, v_num=26, acc=0.500, val_loss=1.570, val_acc=0.564]
Epoch 1: 100%|█████████▉| 2315/2318 [02:04<00:00, 18.63it/s, loss=1.56, v_num=26, acc=0.594, val_loss=1.570, val_acc=0.564]
Validating: 0it [00:00, ?it/s]
Validating:   0%|          | 0/1 [00:00<?, ?it/s]
Epoch 1: 100%|██████████| 2318/2318 [02:08<00:00, 18.07it/s, loss=1.59, v_num=26, acc=0.528, val_loss=1.490, val_acc=0.583]
Epoch 2: 100%|█████████▉| 2315/2318 [02:01<00:00, 19.02it/s, loss=1.53, v_num=26, acc=0.617, val_loss=1.490, val_acc=0.583]
Validating: 0it [00:00, ?it/s]
Validating:   0%|          | 0/1 [00:00<?, ?it/s]
Epoch 2: 100%|██████████| 2318/2318 [02:05<00:00, 18.42it/s, loss=1.57, v_num=26, acc=0.500, val_loss=1.460, val_acc=0.589]

预期,相同训练的“正确”输出应该是:

Epoch 0: 100%|██████████| 2318/2318 [02:09<00:00, 17.84it/s, loss=1.72, v_num=26, acc=0.500, val_loss=1.570, val_acc=0.564]
Epoch 1: 100%|██████████| 2318/2318 [02:08<00:00, 18.07it/s, loss=1.59, v_num=26, acc=0.528, val_loss=1.490, val_acc=0.583]
Epoch 2: 100%|██████████| 2318/2318 [02:05<00:00, 18.42it/s, loss=1.57, v_num=26, acc=0.500, val_loss=1.460, val_acc=0.589]

纪元线怎么会以这种方式无用地重复和拆分?另外我不确定Validating 行有什么用,因为它们似乎没有提供任何信息。

模型的训练和验证步骤如下:

    def training_step(self, train_batch, batch_idx):
        x, y = train_batch
        y_hat = self.forward(x)
        loss = torch.nn.NLLLoss()(torch.log(y_hat), y.argmax(dim=1)) 
        acc = tm.functional.accuracy(y_hat.argmax(dim=1), y.argmax(dim=1))
        self.log("acc", acc, prog_bar=True)
        return loss

    def validation_step(self, valid_batch, batch_idx):
        x, y = valid_batch
        y_hat = self.forward(x)
        loss = torch.nn.NLLLoss()(torch.log(y_hat), y.argmax(dim=1)) 
        acc = tm.functional.accuracy(y_hat.argmax(dim=1), y.argmax(dim=1))
        self.log("val_loss", loss, prog_bar=True)
        self.log("val_acc", acc, prog_bar=True)

【问题讨论】:

  • 您找到解决方案了吗?我也面临类似的问题
  • @HardianLawi 是的,最终通过编写我自己的控制台输出例程

标签: python logging jupyter-notebook pytorch pytorch-lightning


【解决方案1】:

默认情况下,Trainer 配置为在每个 epoch 之后运行验证循环。您可以使用Trainer 中的check_val_every_n_epoch 标志更改此设置。请参阅文档here

【讨论】:

  • 每个 epoch 运行验证都可以,但输出似乎一团糟。
猜你喜欢
  • 2021-08-03
  • 2022-07-21
  • 2022-01-21
  • 2021-10-05
  • 1970-01-01
  • 2021-12-26
  • 2021-03-03
  • 1970-01-01
  • 2023-01-29
相关资源
最近更新 更多