<p>这取决于你想做什么。</p>
<p><strong>案例#1:保存模型,以便自己使用它进行推理</strong>:保存模型,还原模型,然后将模型更改为评估模式。之所以这样做,是因为通常有<code>BatchNorm</code>和<code>Dropout</code>层,默认情况下它们在构造时处于列车模式:</p>
<pre><code>torch.save(model.state_dict(), filepath)
#Later to restore:
model.load_state_dict(torch.load(filepath))
model.eval()
</code></pre>
<p><strong>案例#2:保存模型以便以后继续培训</strong>:如果需要继续培训要保存的模型,则需要保存的不仅仅是模型。您还需要保存优化器、时间段、分数等的状态。您可以这样做:</p>
<pre><code>state = {
'epoch': epoch,
'state_dict': model.state_dict(),
'optimizer': optimizer.state_dict(),
...
}
torch.save(state, filepath)
</code></pre>
<p>要恢复训练,您需要执行如下操作:<code>state = torch.load(filepath)</code>,然后,要恢复每个单独对象的状态,请执行以下操作:</p>
<pre><code>model.load_state_dict(state['state_dict'])
optimizer.load_state_dict(state['optimizer'])
</code></pre>
<p>由于您正在恢复训练,因此在加载时恢复状态后,不要调用<code>model.eval()</code>。</p>
<p><strong>案例#3:其他人无法访问您的代码时使用的模型</strong>:
在Tensorflow中,您可以创建一个<code>.pb</code>文件,该文件定义了模型的体系结构和权重。这非常方便,特别是在使用<code>Tensorflow serve</code>时。在Pytorch中,同样的方法是:</p>
<pre><code>torch.save(model, filepath)
# Then later:
model = torch.load(filepath)
</code></pre>
<p>这种方式仍然不是防弹的,因为Pythorch仍在经历很多变化,我不推荐它。</p>