2017-02-04 48 views
2

上演训练不同的从属图形我试图执行两个任务(A和B),其具有输入端和inp_Ainp_B对应输出out_Aout_B两个在tensorflow

任务A首先通过Graph g_A实现。任务A完成后,我希望使用g_A的权重到新图g_B这是一个更大的图(g_A的超集)。

我不确定如何在tensorflow中做到这一点。

回答

1

我使用这种拆分为训练和验证的目的,在这里我创建专用的输入和输出管道,但共享图形的开始部分,虽然我使用相同(截至tf.Graph())但不同的(不连接的)子图在其内。

在一个tf.Graph()一般概念是variable sharing您可以通过使用tf.variable_scope(),以便将变量的概念,他们创建和使用tf.get_variable()重新获取他们(而不是直接使用tf.Variable())实现。第一次调用它会创建变量,第二次它将重用它们 - 只要变量的名称保持不变即可。

但是我发现它更容易使用tf.make_template()代替,这将包裹创建一个子完全并在每次调用创建图形的新实例,同时共享所有变量的函数。 该文档的例子是

def my_op(x, scalar_name): 
    var1 = tf.get_variable(scalar_name, 
         shape=[], 
         initializer=tf.constant_initializer(1)) 
    return x * var1 

create_instance = tf.make_template('scale_by_y', my_op, scalar_name='y') 

z = create_instance(input1) 
w = create_instance(input2) 

在此,每次调用create_instance会创建一个名为scale_by_y在执行同时共享其内部变量由my_op()定义的操作的图表新节点。 (在该示例中,参数scalar_name静态绑定到值y,导致变量scale_by_y/y在图中创建(并重新使用)。我发现该问题比有用的更困惑。) 它并不关心父项适用范围,所以

with tf.variable_scope('training'): 
    z1 = create_instance(input1) 

with tf.variable_scope('validation'): 
    z2 = create_instance(input2) 

的作品。它也可能或不可以在不同的tf.Graph()实例中工作,但我对此表示怀疑。