擅长:python、mysql、java
<p>经过一番调查,我得出了以下两种解决办法。
此线程中其他地方提供的解决方案手动保留计算图,没有释放它们的选项,因此最初运行良好,但稍后会导致OOM错误。你知道吗</p>
<p>第一种解决方案是使用内置的<code>torch.nn.Sequential</code>将模型绑定在一起:</p>
<pre><code>model = torch.nn.Sequential(Model1(), Model2())
</code></pre>
<p>就这么简单。它看起来很干净,行为和普通模特一模一样。你知道吗</p>
<p>另一种方法是简单地手动将它们捆绑在一起:</p>
<pre><code> model1 = Model1()
model2 = Model2()
y1 = model1(X)
y2 = model2(y1)
loss = criterion(y2, y)
loss.backward()
</code></pre>
<p>我担心这只会反向传播<code>model2</code>结果是没有根据的,因为<code>model1</code>也存储在反向传播的计算图中。
与以前的实现相比,这种实现增强了两个模型之间接口的透明性。你知道吗</p>