mmengine
                                
                                
                                
                                    mmengine copied to clipboard
                            
                            
                            
                        [Feature] Support outputting loss during the validation phase
What is the feature?
用wandb记录,只打出训练的loss,没打出val的loss,原先的openmmlab 1.x都能打出的
openmmlab 2.x版本的输出
openmmlab 1.x版本的输出,便于分析训练是否拟合
Any other context?
No response
We recommend using English or English & Chinese for issues so that we could have broader discussion.
我想你之前是通过在配置文件里指定 workflow 来输出验证集 loss 的吧?在 OpenMMLab 1.0 里,Runner.val 是专门用于输出验证集 loss 的,而 EvalHook 是用来输出评价指标的。
而在 OpenMMLab 2.0 里,统一使用 ValLoop 来进行评测。设计之初我们也讨论过如何输出验证集的 loss,你也可以发现 model.val_step 会接受 mode 参数,进而把 mode 传给 model.forward,根据 mode 的值选择不同的分支。如果你想在验证阶段同时输出验证集 loss,你可以新定义一个 “mode”,例如 "loss_predict",在这个分支下,model.forward 会同时输出 loss 和 metric。由于 model 的输出通常是 List[dict] 或则 List[DataSample],那你只需要让列表里的每个元素额外包含 “loss” 字段即可。
为了能够在配置文件中控制 ValLoop 是否计算 loss,你也可以为 ValLoop 加一个 mode 参数,并通过 val_cfg 参数来控制在调用 model.val_step 时,应该传入什么 mode。
不过我们近期没有计划去实现这个特性,如果可以的话你可以尝试上述的方案是否能够满足你的需求,也欢迎提交 PR 为 MMEngine 支持这个特性。