TensorFlow 训练多个loss函数技巧: 训练步骤,冻结部分层(freeze some scopes),从tensorboard检查问题

这两天使用TensorFlow训练一个多个损失函数的网络模型,自己搭建网络,调参训练,由于网络是一个两阶段的网络,具有三个损失函数,其中两个损失函数监督第一个阶段,一个损失函数家督第二个阶段,而且损失函数监督的并不全是最后一层,还有中间层,这需要调整我的训练方式。

训练方式

  1. 先分别训练第一阶段的两个损失函数
  2. 固定住第一阶段的网络的参数,只训练第二阶段网络参数
  3. 调整三个loss函数的正则化参数,减小学习率同时训练三个loss函数进行精调

冻结部分层(固定低层参数)

第一步和最后一步都好说,假设定义好了三个loss函数分别为self.loss1,self.loss2,self.loss3和加入正则化后的整个网络的损失函数self.loss,那么第一步和第三步的实现实例为

 optimizer = tf.train.AdamOptimizer(self.lr, beta=0.9, beta=0.999, name='AdamOptimizer')
 update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)
 with tf.control_denpendencies(update_ops):
     self.train_op = optimizer.minimize(self.loss)

这是我们常用的整个网络的参数都进行训练的方式,当需要固定低层的参数时,例如我有一个24层的网络,我需要固定1-14层,只更新15-24层,也就是上面的第二个步骤,则代码如下

你可能感兴趣的:(tensorflow,深度学习,训练,tensorflow,冻结部分层,深度学习,训练,tensorboard)