修改PyTorch模型进行推理-然后恢复培训

修改PyTorch模型进行推理-然后恢复培训,pytorch,Pytorch,我想在PyTorch中的模型中交替进行推理和训练,但我需要在推理过程中对其进行修改,对此我有一些问题 我是否可以通过调用model.to('cpu')从gpu卸载模型,制作一个修改后的副本(并在gpu上运行),然后通过调用model.to('gpu')将原始模型移回gpu?换句话说,移动模型gpu->cpu->gpu是一种无损操作吗?传递给优化器的参数会发生什么变化?我不想失去优化器状态 制作内存模型副本的最佳方法是什么?我可以保存它,然后重新加载一个副本,但不确定这是否只是为了复制 如果我想以

我想在PyTorch中的模型中交替进行推理和训练,但我需要在推理过程中对其进行修改,对此我有一些问题

我是否可以通过调用model.to('cpu')从gpu卸载模型,制作一个修改后的副本(并在gpu上运行),然后通过调用model.to('gpu')将原始模型移回gpu?换句话说,移动模型gpu->cpu->gpu是一种无损操作吗?传递给优化器的参数会发生什么变化?我不想失去优化器状态


制作内存模型副本的最佳方法是什么?我可以保存它,然后重新加载一个副本,但不确定这是否只是为了复制

如果我想以半精度运行推理(在这种情况下,速度要快2倍以上),我可以将模型更改为半精度,然后再将其更改回去吗?那是无损的吗?(模型是否保留了所有内容的全精度副本,还是用半精度替换权重?)

该型号与ResNet50相似。两种型号的GPU内存不足:)

制作内存中型号副本的最佳方法是什么?我可以保存它,然后重新加载副本,但不确定复制是否需要这样做

您可以通过以下方式复制模型:

import copy
...
best_model = copy.deepcopy(model)

使用best_型号,您可以保存到磁盘或加载到其他型号,等等

型号:gpu->cpu->gpu是一种无损操作,据我所知。您应该能够使用.detach()创建一个无梯度副本。问题太多了。你应该在许多岗位上工作。我将发布模型副本的答案。嗨,亚历克斯,我,你能测试下面的答案吗?这对你的问题有意义吗?