2016-09-09 11 views
0

Ich baue eine Übersetzungsmaschine auf der Basis der Seq2seq-Klasse. Die Klasse nimmt unterschiedliche Vokabulare für den Codierer und den Decodiererteil an. So erwartet es auch unterschiedliche Einbettungen für die beiden.Verwendung der gleichen Einbettung für Encoder und Decoder in Seq2seq

Allerdings versuche ich, dies in einer einzigen Sprache zu verwenden. Daher möchte ich, dass die beiden Einbettungen eins sind. (Hintergrund ist Laien ausgedrückt zu Experten Begriffe zu übersetzen, in der gleichen Sprache)

Zur Zeit der entsprechende Code ist:

Encoder-Seite: in Python/ops/rnn_cell.py in EmbeddingWrapper():

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])) 

Decoder-Seite: in python/ops/seq2seq.py in embedding_rnn_decoder():

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) 

Jede Idee, wie e legst du diese beiden die gleiche Einbettungsmatrix verwenden?

Antwort

0

Sie können einen wiederverwendbaren Variablenbereich verwenden, wenn Sie die Funktion aufrufen, die die zweite Einbettung erstellt. Wenn Sie einen Bereich mit demselben Namen verwenden und "reuse = True" festlegen, wird die Einbettung wiederverwendet. Die Dokumentation zu sharing variables ist relevant.

+0

Dachte so. Um das zu tun, muss ich die Erstellung der Einbettungsvariablen von relativ tief im System zu einem höheren ziehen oder die Bereiche tief in den Ops ändern. – friesel

Verwandte Themen