2017-11-18 12 views
0

異なる名前のスコープで変数を再利用するという問題があります。以下のコードは、2つの異なる領域に別々のソース埋め込みとターゲット埋め込みを行うコードです。ソースとターゲットを同じスペースに配置し、ルックアップテーブルの変数を再利用します。Tensorflowは異なる名前のスコープで変数を再利用します

''' Applying bidirectional encoding for source-side inputs and first-word decoding. 
''' 
def decode_first_word(self, source_vocab_id_tensor, source_mask_tensor, scope, reuse): 
    with tf.name_scope('Word_Embedding_Layer'): 
     with tf.variable_scope('Source_Side'): 
      source_embedding_tensor = self._src_lookup_table(source_vocab_id_tensor) 
    with tf.name_scope('Encoding_Layer'): 
     source_concated_hidden_tensor = self._encoder.get_biencoded_tensor(\ 
      source_embedding_tensor, source_mask_tensor) 
    with tf.name_scope('Decoding_Layer_First'): 
     rvals = self.decode_next_word(source_concated_hidden_tensor, source_mask_tensor, \ 
      None, None, None, scope, reuse) 
    return rvals + [source_concated_hidden_tensor] 


''' Applying one-step decoding. 
''' 
def decode_next_word(self, enc_concat_hidden, src_mask, cur_dec_hidden, \ 
          cur_trg_wid, trg_mask=None, scope=None, reuse=False, \ 
          src_side_pre_act=None): 
    with tf.name_scope('Word_Embedding_Layer'): 
     with tf.variable_scope('Target_Side'): 
      cur_trg_wemb = None 
      if None == cur_trg_wid: 
       pass 
      else: 
       cur_trg_wemb = self._trg_lookup_table(cur_trg_wid) 

私はを次のようにそれら作りたい、これだけグラフ全体で1つの埋め込みノードが存在します。

def decode_first_word_shared_embedding(self, source_vocab_id_tensor, source_mask_tensor, scope, reuse): 
    with tf.name_scope('Word_Embedding_Layer'): 
     with tf.variable_scope('Bi_Side'): 
      source_embedding_tensor = self._bi_lookup_table(source_vocab_id_tensor) 
    with tf.name_scope('Encoding_Layer'): 
     source_concated_hidden_tensor = self._encoder.get_biencoded_tensor(\ 
      source_embedding_tensor, source_mask_tensor) 
    with tf.name_scope('Decoding_Layer_First'): 
     rvals = self.decode_next_word_shared_embedding(source_concated_hidden_tensor, source_mask_tensor, \ 
      None, None, None, scope, reuse) 
    return rvals + [source_concated_hidden_tensor] 

def decode_next_word_shared_embedding(self, enc_concat_hidden, src_mask, cur_dec_hidden, \ 
          cur_trg_wid, trg_mask=None, scope=None, reuse=False, \ 
          src_side_pre_act=None): 
    with tf.name_scope('Word_Embedding_Layer'):    
     cur_trg_wemb = None 
     if None == cur_trg_wid: 
      pass 
     else: 
      with tf.variable_scope('Bi_Side'): 
       cur_trg_wemb = self._bi_lookup_table(cur_trg_wid) 

これを達成するためにどのように?

答えて

関連する問題