Tensorflow:跨图形传输变量

时间:2016-04-05 23:24:10

标签: tensorflow

我试图找出如何将学习的已保存模型作为较大模型的一部分导入。

具体来说,我有一个RNN和一些嵌入矩阵(模型A),它们已经在.ckpt文件中存储的大型数据集上进行了训练。我还有另一个模型(模型B),它使用这个完全相同的RNN和嵌入模型作为子模型,并使用额外的操作来操纵该RNN的输出并将其用于分类。

这两个模型的图形定义不同,但我想将模型B初始化为模型A的保存版本。如何做到这一点?

我到目前为止的尝试是尝试将模型A作为另一个模型加载到另一个会话和图形下,然后将模型B中的相关矩阵分配给来自A的模型,但这不起作用。

以下是代码的相关部分:

sup = supervised() # spins up a class with an interactive session inside and sets up the graph
g = tf.Graph()
with g.as_default():
    unsup = unsupervised('unsup.ckpt') # loads in model A from file 
                                       # w/ another session (not interactive)
    # get matrix from unsup and assign to sup
    sup._word_embeddings.assign(unsup.session.run(unsup._word_embeddings))
    # do the same for the RNN
    sup._gate_matrix.assign(unsup.session.run(unsup._gate_matrix))
    sup._gate_bias.assign(unsup.session.run(unsup._gate_bias))
    sup._cand_matrix.assign(unsup.session.run(unsup._cand_matrix))
    sup._cand_bias.assign(unsup.session.run(unsup._cand_bias))

请注意,在实例化类时,两个模型都使用rnn_cell.lineartf.get_variable()的{​​{1}}矩阵分配显式变量。

提前致谢!

1 个答案:

答案 0 :(得分:0)

答案结果如此简单。这只是创建了分配操作...要实际执行分配,请在适当的会话中运行操作。