model.train()与model.val()

一、问题描述

  1. 需要将mmpose框架下训练的模型单独保存出来,做后续处理。
  2. 用torch.save()直接保存模型mmpose_model.pt,然后重新搭建模型,把保存的模型参数加载进去,得到scratch_model.pt
  3. 使用scratch_model.pt进行推理,与mmpose_model.pt推理结果不同。二者都转成onnx模型后,推理结果与mmpose_model.pt的推理结果相同。

二、问题分析

mmpose_model.pt与scratch_model.pt的数据预处理以及输出的后处理是一致的,所以应该是模型加载的时候有问题。
查资料发现,使用scratch_model.pt进行推理的时候,没有加model.eval()

二、model.train()与model.val()区别

  1. 参考https://blog.csdn.net/libaominshouzhang/article/details/119741474
  2. 参考https://blog.csdn.net/qq_38410428/article/details/101102075
    model.train()与model.val()在处理BatchNormalizationDropout层时候的机制不同。
    model.train()时,BatchNormalization的参数会根据输入更新,Dropout使输入以p的概率参与计算
    model.eval()时,BatchNormalization的参数则会固定,与保存的值一致,Dropout不起作用,所有输入参与计算
    model.train()与model.val()_第1张图片

你可能感兴趣的:(#,Pytorch,深度学习)