2016-05-11 2 views

Répondre

7

[NOTE: cette réponse est mis à jour pour r1.0 ... mais explique legacy_seq2seq au lieu de tensorflow/tensorflow/contrib/seq2seq/]

Les bonnes nouvelles sont que les modèles seq2seq fournis dans tensorflow sont assez sophistiqués, y compris les incorporations, les seaux, le mécanisme d'attention, les modèles multitâches un-à-plusieurs, etc.

Les mauvaises nouvelles sont qu'il y a s beaucoup de complexité et de couches d'abstraction dans le code Python, et que le code lui-même est la meilleure "documentation" disponible du RNN de plus haut niveau et seq2seq "API" pour autant que je sache ... heureusement le code est bien docstring 'ré. En pratique, je pense que les exemples et les fonctions auxiliaires indiqués ci-dessous sont principalement utiles pour vous aider à comprendre les modèles de codage ... et que dans la plupart des cas, vous devrez ré-implémenter ce dont vous avez besoin en utilisant les fonctions de base dans le niveau inférieur Python API

Voici une ventilation du code seq2seq RNN de haut en bas de la version R1.0:

models/tutorials/rnn/translate/translate.py

... fournit main(), train(), decode() qui fonctionne hors-the-box pour traduire l'anglais vers le français ... mais vous pouvez adapter ce code à d'autres ensembles de données

models/tutorials/rnn/translate/seq2seq_model.py

... class Seq2SeqModel() met en place un RNN sophistiqué codeur-décodeur avec des plongements, des compartiments, un mécanisme d'attention ... si vous n'avez pas besoin d'incorporations, de compartiments ou d'attention, vous devrez implémenter une classe similaire.

tensorflow/tensorflow/contrib/legacy_seq2seq/python/ops/seq2seq.py

... principal point d'entrée pour les modèles seq2seq via des fonctions d'aide. Voir model_with_buckets(), embedding_attention_seq2seq(), embedding_attention_decoder(), attention_decoder(), sequence_loss(), etc. Les exemples incluent one2many_rnn_seq2seq et modèles sans incorporations/attention a également fourni comme basic_rnn_seq2seq. Si vous pouvez bloquer vos données dans les tenseurs que ces fonctions accepteront, cela pourrait être votre meilleur point d'entrée pour construire votre propre modèle.

tensorflow/tensorflow/contrib/rnn/python/ops/core_rnn.py

... fournit un wrappers pour les réseaux RNN comme static_rnn() avec une cloche et de sifflets, je ne ai pas besoin habituellement si je viens d'utiliser le code comme ceci:

def simple_rnn(cell, inputs, dtype, score): 
    with variable_scope.variable_scope(scope or "simple_RNN") as varscope1: 
      if varscope1.caching_device is None: 
       varscope1.set_caching_device(lambda op: op.device) 

     batch_size = array_ops.shape(inputs[0])[0] 
     outputs = [] 
     state = cell.zero_state(batch_size, dtype)    

     for time, input_t in enumerate(inputs): 
      if time > 0:  
      variable_scope.get_variable_scope().reuse_variables() 


      (output, state) = cell(input_t, state) 

      outputs.append(output) 

     return outputs, state