2016-09-09 26 views
0

我正在構建一個基於seq2seq-class的翻譯機器。該類爲編碼器和解碼器部分假設不同的詞彙表。因此它也期望兩者有不同的嵌入。在編碼器和解碼器中使用相同的嵌入seq2seq

但是,我試圖在單一語言中使用它。因此我希望這兩個嵌入是一個嵌入。 (背景是外行人的術語翻譯專家而言,相同的語言裏面)

目前相關的代碼是:

編碼器側: 在EmbeddingWrapper()的Python/OPS/rnn_cell.py:

with vs.variable_scope(scope or "EmbeddingWrapper"): 
     additional_info_size with vs.variable_scope(scope or type(self).__name__): 
     with ops.device("/cpu:0"): 
     embedding = vs.get_variable("embedding", [self._embedding_classes, self._embedding_size], initializer=initializer) 
     embedded = embedding_ops.embedding_lookup(embedding, array_ops.reshape(inputs, [-1])) 

解碼器側:在embedding_rnn_decoder 在蟒/操作/ seq2seq.py():

with variable_scope.variable_scope(scope or "embedding_rnn_decoder"): 
    with ops.device("/cpu:0"): 
     embedding = variable_scope.get_variable("embedding", [num_symbols, embedding_size]) 
    loop_function = _extract_sksk_argmax_and_embed(
     embedding, output_projection, 
     update_embedding_for_previous) if feed_previous else None 
    emb_inp = (embedding_ops.embedding_lookup(embedding, i) for i in decoder_inputs) 

不知道如何以電子郵件合法地讓這兩個使用相同的嵌入矩陣?

回答

0

當您調用創建第二個嵌入的函數時,可以使用重用變量作用域。如果您使用同名的作用域並設置reuse = True,則嵌入將被重用。有關sharing variables的文檔是相關的。

+0

這樣想的。爲了做到這一點,我必須將嵌入變量的創建從系統中相對較深的位置提升到更高的位置,或者在操作系統中更改內部變量的範圍。 – friesel

相關問題