【问题标题】:Fine-tuning PyTorch: No deepcopy微调 PyTorch:没有 deepcopy
【发布时间】:2021-10-08 15:52:55
【问题描述】:

关于在 PyTorch 中微调 CNN,根据 SAVING AND LOADING MODELS

如果您只打算保留性能最佳的模型(根据获得的验证损失),……您必须序列化 best_model_state 或使用 best_model_state = deepcopy(model.state_dict()) 否则您的 best_model_state 将在后续更新中不断更新训练迭代。因此,最终的模型状态将是过度拟合模型的状态。

但是,我做了这样的事情:

def train_model(model, ...):
       ...
       if validation_loss improves:
            delete previous best model
            torch.save(model.state_dict(), best_model_path)
       else:
             ....
        ...
        return model

 def test_model(model, best_model_path, ...):
     model.load_state_dict(torch.load(best_model_path))
     model.eval()
     ...

...

my_model = train_model(my_model, ...)

test_model(my_model, my_path, ...)

也就是说,训练阶段返回的模型是最后一个可能出现过拟合的模型(我没有使用 deepcopy)。但是由于我在训练期间保存了最佳模型,因此在测试/推理阶段我没有问题,因为我加载了最佳模型,重载了测试期间获得的最终模型。

这个解决方案有问题吗?

谢谢。

【问题讨论】:

    标签: pytorch deep-copy


    【解决方案1】:

    您仍在按照教程的说明进行操作。请注意本教程的这一部分:

    你必须序列化best_model_state或者使用best_model_state = deepcopy(model.state_dict())

    您序列化了最佳模型的状态(将其写入磁盘),因此您无需使用deepcopy

    如果您将模型保存在内存中,您会使用 deepcopy 来确保它在训练期间不会被更改。但是因为您将它保存在磁盘上,所以它不会被更改。

    【讨论】:

    • 谢谢艾莉亚。我只是想确定我做对了,根据你的回答似乎没问题,因为我在测试期间用最好的模型重载了模型。
    • 太好了,很高兴听到它!
    猜你喜欢
    • 2023-04-04
    • 2021-11-18
    • 2018-12-17
    • 2013-12-07
    • 1970-01-01
    • 2019-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多