2016-11-06 9 views
1

Ich würde gerne die gleiche RNN über zwei Tensoren in Tensorflow laufen. Meine aktuelle Lösung sieht wie folgt aus:Laufen die gleiche RNN über zwei Tensoren in Tensorflow

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) 

Ist dies der beste Weg, um sicherzustellen, dass sich die Gewichte zwischen den beiden RNN ops geteilt werden?

Antwort

1

Ja das ist im Grunde, wie ich es tun würde. Für ein wirklich einfaches Modell wie dieses spielt es keine Rolle, aber für ein komplizierteres Modell würde ich eine Funktion definieren, um das Diagramm zu erstellen.

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) 

Der andere Weg, es zu tun wäre, tf.cond(...) als Schalter zu verwenden, um zwischen den Eingängen auf einem boolean Platzhalter Basis zu ändern. Sie würden dann zu nur einem Ausgang gehen. Ich habe festgestellt, dass dies ein wenig unordentlich werden kann. Außerdem müssten Sie beide Eingänge bereitstellen, selbst wenn Sie wirklich nur eine benötigen. Ich denke, meine erste Lösung ist die beste.

+0

Danke für den Hinweis! – mskel

Verwandte Themen