2016-11-06 9 views
1

テンソルフローの2つのテンソルで同じRNNを実行したいとします。私の現在のソリューションは、次のようになります。テンソルフローの2つのテンソルで同じ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) 

この2つのRNNのOPS間の重みが共有されていることを保証するための最良の方法ですか?

答えて

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(...)用いることであろう。彼らはただ一つの出力に行くでしょう。私はこれが少し乱雑になることがわかった。実際に必要な場合でも両方の入力を提供する必要があります。私は私の最初の解決策が最高だと思う。

+0

アドバイスありがとうございます! – mskel

関連する問題