在tensorflow中通过两个张量运行相同的RNN

时间:2016-11-06 08:06:29

标签: tensorflow

我想在张量流中的两个张量上运行相同的RNN。我目前的解决方案如下:

cell = tf.nn.rnn_cell.GRUCell(cell_size)

with tf.variable_scope("encoder", reuse=None):
    out1 = tf.nn.dynamic_rnn(cell, tensor1, dtype=tf.float32)

with tf.variable_scope("encoder", reuse=True):
    out2 = tf.nn.dynamic_rnn(cell, tensor2, dtype=tf.float32)

这是确保共享两个RNN操作之间权重的最佳方法吗?

1 个答案:

答案 0 :(得分:1)

是的,这基本上就是我怎么做的。对于这样一个非常简单的模型而言并不重要,但对于更复杂的模型,我将定义一个函数来构建图形。

def makeEncoder(input_tensor):
    cell = tf.nn.rnn_cell.GRUCell(cell_size)
    return tf.nn.dynamic_rnn(cell, tensor1, dtype=tf.float32)

with tf.variable_scope('encoder') as scope:
    out1 = makeEncoder(tensor1)
    scope.reuse_variables()
    out2 = makeEncoder(tensor2)

另一种方法是使用tf.cond(...)作为开关,根据布尔占位符在输入之间进行切换。然后他们只会输出一个输出。我发现这可能会有点混乱。即使你真的只需要输入,你也需要提供两个输入。我认为我的第一个解决方案是最好的。