Tensorflow:我可以将多个name_scope组合成一个用于优化器更新吗?

时间:2016-09-03 03:45:51

标签: tensorflow

我有两个命名范围用于CNN的单独子图(使用tf.variable_scope)。我可以将两个范围合并为一个,以便我的优化器仅更新两个范围中的变量吗?

1 个答案:

答案 0 :(得分:10)

根据tf.Optmizer documentation,函数minimize可以采用var_list(这些vars引用图中的学习变量权重)。所以使用它你只需要从图中获得一个变量列表(如[w1,b1]的简单MLP)。

如果您使用tf.variable_scope命名它们,则应该能够使用tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLESscope="my_scope_name"),如tf.get_collection documentation中所述。如果要获取两个变量范围,则应该能够使用+运算符获取组合列表,因为调用返回python列表。

所以,结合这两个想法,我相信你可以做到:

loss = ...
vars_to_minimize = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES, scope='var_scope_name_1') + 
                   tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES, scope='var_scope_name_2')
minimize_op = tf.Optimizer().minimize(loss, var_list=vars_to_minimize)

注意:有关在get_collection调用中使用的可用密钥的详细信息,请参阅GraphKeys documentation