我想在张量流中的两个张量上运行相同的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操作之间权重的最佳方法吗?
答案 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(...)
作为开关,根据布尔占位符在输入之间进行切换。然后他们只会输出一个输出。我发现这可能会有点混乱。即使你真的只需要输入,你也需要提供两个输入。我认为我的第一个解决方案是最好的。