質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

1588閲覧

embedding_ops.embedding_lookupが変換する結果を確認したいのです

tak__tak

総合スコア78

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2017/12/12 10:08

編集2017/12/13 01:21

python3

1 2import tensorflow as tf 3from tensorflow.python.ops import embedding_ops 4 5embedding=[ 6....... 7] 8sess = tf.Session() 9sess.run(tf.global_variables_initializer()) 10init = tf.constant_initializer( embedding ) 11embeddings = tf.get_variable('embeddings', shape=[ len( embedding) , len( embedding[0]) ] , initializer=init , trainable=False ) 12word_vectors = embedding_ops.embedding_lookup(embeddings, X , name='words' ) 13print( sess.run( word_vectors ) ) 14

このようにしてword_vectors の内容を見たいのですが、tf.get_variable の時に

FailedPreconditionError (see above for traceback): Attempting to use uninitialized value embeddings
[[Node: embeddings/read = IdentityT=DT_FLOAT, _class=["loc:@embeddings"], _device="/job:localhost/replica:0/task:0/gpu:0"]]

というエラーになります。
変数の初期化などの問題では無いように思えるのですが、
word_vectors の出力を見るためにはどのようにしたら良いでしょうか?



最短のソースコードを追記します。
X,embeddingなどは動的に作っても同じだと思います

python3

1import tensorflow as tf 2from tensorflow.python.ops import embedding_ops 3X=[ [1, 2, 4 , 0 , 0 ], [ 1,3 ,3 ,4, 0 ] ] 4embedding=[ [ 0, 0 ] , [ 1 , 1 ] , [ 2 , 2 ] , [ 3 , 3 ] , [ 4 , 4 ] , ] 5sess = tf.Session() 6sess.run(tf.global_variables_initializer()) 7init = tf.constant_initializer( embedding ) 8embeddings = tf.get_variable('embeddings', shape=[ len( embedding) , len( embedding[0]) ] , initializer=init , trainable=False ) 9word_vectors = embedding_ops.embedding_lookup(embeddings, X , name='words' ) 10print( sess.run( word_vectors ) )

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mkgrei

2017/12/12 15:00

参考元もしくは実行可能な最小コードを添えていただけないでしょうか。
guest

回答1

0

ベストアンサー

embeddingsを定義した後は初期化をしていないことが少し気になります。


python

1import tensorflow as tf 2from tensorflow.python.ops import embedding_ops 3X=[ [1, 2, 4 , 0 , 0 ], [ 1,3 ,3 ,4, 0 ] ] 4embedding=[ [ 0, 0 ] , [ 1 , 1 ] , [ 2 , 2 ] , [ 3 , 3 ] , [ 4 , 4 ] , ] 5sess = tf.Session() 6sess.run(tf.global_variables_initializer()) 7init = tf.constant_initializer( embedding ) 8embeddings = tf.get_variable('embeddings', shape=[ len( embedding) , len( embedding[0]) ] , initializer=init , trainable=False ) 9word_vectors = embedding_ops.embedding_lookup(embeddings, X , name='words' ) 10 11#↓ 12sess.run(embeddings.initializer) 13#or 14#sess.run(tf.global_variables_initializer()) 15 16print( sess.run( word_vectors ) )

投稿2017/12/12 15:01

編集2017/12/13 02:45
mkgrei

総合スコア8560

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tak__tak

2017/12/13 00:11

initializer=init で初期化しているのではないのですか?
mkgrei

2017/12/13 02:22

そこではどのように初期化するのかを決めていて、初期化するには別のメソッドをコールする必要がある気がします。 https://www.tensorflow.org/programmers_guide/variables embeddings.initializer.run() などを試してみてもうまくいきませんか。
tak__tak

2017/12/13 05:41

tf.get_variable の時にエラーなので その前にですよね? その前に tf.global_variables_initializer().run()  としたところ こうなります raise ValueError("Cannot execute operation using `run()`: No default " ValueError: Cannot execute operation using `run()`: No default session is registered. Use `with sess.as_default():` or pass an explicit session to `run(session=sess)`
mkgrei

2017/12/13 06:35

追加したコードをご覧になってください。 .run()ができるのはデフォルトセッションを設定した際です。 それ以外ではsess.runを使います。 もしくは.run(session=sess)。 get_variable後のエラーだと認識しています。 変数をゲットしてから初期化をしていないので、ゲットした後から初めて使う直前までに初期化を行う必要があります。 以前のコメントの際のURLに変数の複数の初期化の方法及び初期化の有無をチェック方法が書かれております。
tak__tak

2017/12/14 00:15

分かりました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問