你好Stackoverflow社区!
我想知道一个简单的想法,以减少关于训练前馈神经网络的特定问题(与我的另一个问题:OOM computing gradients for deep neural net.有关)的内存需求。
让我们假设我有一个用张量流定义的图,实现了多感知器和损失函数的计算。在初始化变量等之后,我通过将输入馈入该图中来计算前向通过,从而获得一些输出值。我将输出值存储在列表中。之后,我使用先前的输出作为新输入进行另一个前向传递,并再次保存新的输出值。 我可以多次重复此过程,并通过深度神经网络实现一种前向传递。我将这种重复称为步骤k 。我在整体上做了这样的步骤。
在最后两个计算步骤中,图像propagation between steps将这一想法变为现实。
我现在的目标是,在所有这些步骤中计算错误的向后传递。
旨在将计算出的梯度存储在每个步骤中,但不直接应用。
我可以使用保存的值来重新计算每一步的激活。
在最后一步中,可以使用用户定义的目标 step K 使用 train_op.compute_gradients(loss) op从定义的损失函数直接获取梯度。以及为步骤K-1 保存的最后一个输出值。
现在,我希望能够仅使用 tf.gradients(loss,[input_vars])之类的东西来计算梯度w.r.t。输入。我可以将此梯度添加到 step K-1 的输出值中,并将该总和用作评估 step K-1 的损失函数的目标值,再次使用步骤K-2 的输出作为输入值。
换句话说:损耗Fct w.r.t.的梯度。输入提供有关上一步输出应如何更改的信息。这个想法是通过某种方式实现的,还是已经存在在断开的计算图之间通过中间值进行这种反向传播的方法?
还是我要问/写的完全废话? (对我来说,实际上很难用语言表达出来……)
谢谢您的时间!