2017-03-29 14 views
0

私はこの質問が前に投稿されていますが、回答を見て知っている私はこれを行う方法を理解することはできません。テンソルフローのseq2seq埋め込み(テンソルフローチュートリアルの翻訳例)で、エンコーダ入力に事前訓練されたベクトルを使用したいと思います。 私はそれが次のコードを使用して埋め込みを開始core_rnn_cell_imp.pyファイルに知っている:Pretrained word2vecでSeq2seqを埋め込む

embedding = vs.get_variable(
      "embedding", [self._embedding_classes, self._embedding_size], 
      initializer=initializer, 
      dtype=data_type) 

しかし、どのように私は、配列Xと、この埋め込みを上書きすることができます。

X = np.ndarray(shape=(20,10), dtype='f') # lets say I want to replace the embedding with this pretrained array 

    with tf.variable_scope("embedding_rnn_seq2seq"): 
     with tf.variable_scope("embedding_wrapper"): 
     sess.run(tf.assign(embedding, X)) 

私がモデルを作成した後、私は上記のコードをトレーニングの直前に実行したところ、次のエラーが表示されます。

global name 'embedding' is not defined 

この問題を修正するにはどうすればよいですか?申し訳ありませんが、私はテンソルフローが初めてです。

+0

新しいコードを追加したのと同じPython関数で 'embedding'が定義されていますか? – mrry

+0

@mrry - そうではありません。これが私がこのエラーに遭う理由ですか? – user1512681

+0

はい、変数名が同じスコープで定義されていないため、Pythonエラーです。 'embedding'の値をあなたが使用しようとしているポイントに渡すための何らかの方法を見つける必要があります。 – mrry

答えて

0

はちょうど私が、これは便利だと思います chatbot.py

def loadEmbedding(self, sess): 
     """ Initialize embeddings with pre-trained word2vec vectors 
     Will modify the embedding weights of the current loaded model 
     Uses the GoogleNews pre-trained values (path hardcoded) 
     """ 
…… 

を参照してください。

関連する問題