通常,如果我们在类中通过神经网络定义了一个函数,然后在另一个类中,如果我们需要这个函数的参数或变量列表,在TensorFlow中,我们可以使用tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES, scope="函数名")
,这对我来说既方便又熟悉,尽管我猜想还有许多其他更有效的方法可以做到这一点。
然而,在某些情况下,我们可能需要定义一个基于两个不同神经网络的函数,比如F(x) = F(NN_1(x), NN_2(x))
,那么在另一个类中,如何正确地获取NN_1()
和NN_2()
的两个变量列表呢?显然,这里使用tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES, scope="函数名"
会导致获取F(x)
的混合变量列表,而不是NN_1
和NN_2
的两个变量列表。
def function() with tf.name_scope(function): with tf.name_scope(subfunction_1): neural_network_1 with tf.name_scope(subfunction_2): neural_network_2
回答:
在名称范围的树结构中,你可以访问各个范围内的变量,如下所示:
vars_1 = tf.get_collection( tf.GraphKeys.TRAINABLE_VARIABLES, scope="函数名/子函数名_1")vars_2 = tf.get_collection( tf.GraphKeys.TRAINABLE_VARIABLES, scope="函数名/子函数名_2")