我有一个与此类似的问题.
因为我的资源有限而且我使用深度模型(VGG-16) - 用于训练三重网络 - 我想为128个大小的一个训练示例累积渐变,然后传播错误并更新权重.
我不清楚我该怎么做.我使用tensorflow但欢迎任何实现/伪代码.
请对您的想法添加最少的评论,以便我可以改进我的查询。谢谢。:)
我正在尝试tf.keras使用梯度累积(GA)训练模型。但我不想在自定义训练循环中使用它(如),而是.fit()通过覆盖train_step. 来自定义方法。这可能吗?如何做到这一点?原因是,如果我们想获得keras诸如fit, 之类的内置功能的好处callbacks,我们不想使用自定义训练循环,但同时如果我们train_step出于某种原因(如 GA 或其他)想覆盖,我们可以自定义fit方法并仍然可以利用这些内置函数。
而且,我知道使用GA的优点,但使用它的主要缺点是什么?为什么它不是默认功能,而是框架的可选功能?
# overriding train step
# my attempt
# it's not appropriately implemented
# and need to fix
class CustomTrainStep(tf.keras.Model):
def __init__(self, n_gradients, *args, **kwargs):
super().__init__(*args, **kwargs)
self.n_gradients = n_gradients
self.gradient_accumulation = [tf.zeros_like(this_var) for this_var in \
self.trainable_variables]
def train_step(self, data):
x, y = data
batch_size = tf.cast(tf.shape(x)[0], tf.float32)
# Gradient Tape …Run Code Online (Sandbox Code Playgroud)