tensorflow冻结层的方法

简介最近在搞faster-rcnn的改动,网上看到很多人在做的一些改进,其中就包括冻结Bn等等方式,于是自己也就查了一下tensorflow里面冻结层的方法,现在总结如下: 1、比如使用一个VGG的前面提取特征的部分,而微调其全连层,或者将其全连层更换为使用convolution来完成,可以使用TensorFlow的stop_gradient函数,将模型的一部分进行冻结。 2、采用get_collection: #定义优化算子 optimizer = tf.train.AdamOptimizer(
最近在搞faster-rcnn的改动,网上看到很多人在做的一些改进,其中就包括冻结Bn等等方式,于是自己也就查了一下tensorflow里面冻结层的方法,现在总结如下:
1、比如使用一个VGG的前面提取特征的部分,而微调其全连层,或者将其全连层更换为使用convolution来完成,可以使用TensorFlow的stop_gradient函数,将模型的一部分进行冻结。

2、采用get_collection:
#定义优化算子
optimizer = tf.train.AdamOptimizer( 1e-3)
#选择待优化的参数
output_vars = tf.get_collection(tf.GraphKyes.TRAINABLE_VARIABLES, scope= 'outpt')
train_step = optimizer.minimize(loss_score,var_list = output_vars)
把需要更新梯度的层放在get_collection这个函数里面,不需要更新的不放进去。


通过 with tf.name_scope('training') 限制变量的“作用域”

然后在var_list指定该作用域中的变量,训练时只更新作用域中的变量。

本文转自:https://blog.csdn.net/gbyy42299/article/details/80970513