Python 2.7 微调vgg提升内存错误

Python 2.7 微调vgg提升内存错误,python-2.7,tensorflow,conv-neural-network,vgg-net,Python 2.7,Tensorflow,Conv Neural Network,Vgg Net,嗨,我正试图微调vgg对我的问题,但当我试图训练网络,我得到这个错误 使用形状[250884096]分配张量时的OOM 网络具有以下结构: 我从这里得到这个tensorflow预训练vgg实现 我只添加以下步骤来训练网络: with tf.name_scope('joint_loss'): joint_loss = ya_loss+yb_loss+yc_loss+yd_loss+ye_loss+yf_loss+yg_loss+yh_loss+yi_loss+yl_loss+ym_loss+

嗨,我正试图微调vgg对我的问题,但当我试图训练网络,我得到这个错误

使用形状[250884096]分配张量时的OOM

网络具有以下结构:

我从这里得到这个tensorflow预训练vgg实现

我只添加以下步骤来训练网络:

with tf.name_scope('joint_loss'):
   joint_loss = ya_loss+yb_loss+yc_loss+yd_loss+ye_loss+yf_loss+yg_loss+yh_loss+yi_loss+yl_loss+ym_loss+yn_loss

    # Loss with weight decay
    l2_loss = tf.add_n([tf.nn.l2_loss(v) for v in tf.trainable_variables()])
    self.joint_loss = joint_loss + self.weights_decay * l2_loss
    self.optimizer = tf.train.AdamOptimizer(learning_rate=self.learning_rate).minimize(joint_loss)
我试图将批处理大小减少到2,但没有成功,我得到了相同的错误。该错误是由于无法在内存中分配的大张量造成的。我得到这个错误只有在火车的原因,如果我饲料的价值,而不最小化净工程。如何避免这个错误?如何保存图形卡NVIDIA GeForce GTX 970的内存


更新:如果我使用GradientDescentOptimizer,训练过程开始,而如果我使用AdamOptimizer,我会得到内存错误,似乎GradientDescentOptimizer使用的内存更少。

如果没有向后传递,则在不最小化的情况下输入值,TensorFlow可以立即取消分配中间激活。对于向后传递,图形有一个巨大的U形,其中向前传递的激活需要保存在向后传递的内存中。有一些技巧,例如,但一般来说,backprop意味着内存使用率会更高

Adam确实保留了一些额外的簿记变量,因此它会根据权重变量已经使用的内存量成比例地增加内存使用量。如果您的培训步骤需要相当长的时间,在这种情况下,在GPU上进行变量更新并不重要,您可以在主机内存中找到优化操作

如果您需要更大的批处理大小,并且无法降低图像分辨率或模型大小,那么使用类似的方式组合来自多个Worker/GPU的渐变是一个不错的选择。查看与此模型相关的论文,看起来他们在4个GPU上进行训练,每个GPU有12GB内存