Python 在PyTorch中,如何将张量附加到计算图中的特定点?

Python 在PyTorch中,如何将张量附加到计算图中的特定点?,python,pytorch,autograd,computation-graph,Python,Pytorch,Autograd,Computation Graph,如问题中所述,我需要在Pytorch中的计算图中的特定点上附加一个张量 我想做的是: 在获取所有小批量的输出时,将它们累积到一个列表中,当一个历元结束时,计算平均值。然后,我需要根据平均值来计算损失,因此反向传播必须考虑所有这些操作。 我能够在训练数据不多的情况下做到这一点(无需分离和存储)。然而,当它变得更大时,这是不可能的。如果每次都不分离输出张量,我的GPU内存就用完了,如果分离,我就会从计算图中丢失输出张量的轨迹。看起来无论我有多少个GPU,这都是不可能的,因为PyTorch只使用前4个

如问题中所述,我需要在Pytorch中的计算图中的特定点上附加一个张量

我想做的是: 在获取所有小批量的输出时,将它们累积到一个列表中,当一个历元结束时,计算平均值。然后,我需要根据平均值来计算损失,因此反向传播必须考虑所有这些操作。 我能够在训练数据不多的情况下做到这一点(无需分离和存储)。然而,当它变得更大时,这是不可能的。如果每次都不分离输出张量,我的GPU内存就用完了,如果分离,我就会从计算图中丢失输出张量的轨迹。看起来无论我有多少个GPU,这都是不可能的,因为PyTorch只使用前4个存储输出张量,如果我在将它们保存到列表中之前没有分离,即使我分配了超过4个GPU

非常感谢您的帮助


谢谢。

一个时代有多少小批量?你的问题看起来有点像RNN在时间上的反向传播,我期待着一个答案……小批量确实不重要,因为我试图在每个历元上反向传播。因为我需要传递所有训练数据并存储它们的输出,所以它只会改变直到内存耗尽的时间。我尝试了16到128之间的许多选项。实际上我要求的是每个历元的迷你批,而不是大小。此值直接影响内存。#每个历元的小批量会根据批量大小而变化,但这并不重要,因为我每次需要等到一个历元结束,这意味着所有数据都需要在20个小批量或89个小批量中通过网络。因此,每个历元的小批量并不重要。如果存储网络的输出,pytorch将必须保留整个网络。因此,如果您有10个minibatch的10个输出,pytorch将存储10个版本的网络。我不是绝对肯定,但我很确定,重要的是小批量,而不是数据的大小。一个时代有多少小批量?你的问题看起来有点像RNN在时间上的反向传播,我期待着一个答案……小批量确实不重要,因为我试图在每个历元上反向传播。因为我需要传递所有训练数据并存储它们的输出,所以它只会改变直到内存耗尽的时间。我尝试了16到128之间的许多选项。实际上我要求的是每个历元的迷你批,而不是大小。此值直接影响内存。#每个历元的小批量会根据批量大小而变化,但这并不重要,因为我每次需要等到一个历元结束,这意味着所有数据都需要在20个小批量或89个小批量中通过网络。因此,每个历元的小批量并不重要。如果存储网络的输出,pytorch将必须保留整个网络。因此,如果您有10个minibatch的10个输出,pytorch将存储10个版本的网络。我不是绝对肯定,但我非常确定,重要的是迷你批处理,而不是数据集的大小