上演训练不同的从属图形我试图执行两个任务(A和B),其具有输入端和inp_A
和inp_B
对应输出out_A
,out_B
。两个在tensorflow
任务A首先通过Graph g_A
实现。任务A完成后,我希望使用g_A
的权重到新图g_B
这是一个更大的图(g_A
的超集)。
我不确定如何在tensorflow中做到这一点。
上演训练不同的从属图形我试图执行两个任务(A和B),其具有输入端和inp_A
和inp_B
对应输出out_A
,out_B
。两个在tensorflow
任务A首先通过Graph g_A
实现。任务A完成后,我希望使用g_A
的权重到新图g_B
这是一个更大的图(g_A
的超集)。
我不确定如何在tensorflow中做到这一点。
我使用这种拆分为训练和验证的目的,在这里我创建专用的输入和输出管道,但共享图形的开始部分,虽然我使用相同图(截至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()
实例中工作,但我对此表示怀疑。