2016-12-16 6 views
4

ルックアップテーブルを介してアクセスする必要がある、連結できないオブジェクトのリストを想定します。リストインデックスはテンソルオブジェクトになりますが、これは不可能です。TensorFlowテンソルでリストをインデックスする方法は?

tf_look_up = tf.constant(np.array([3, 2, 1, 0, 4])) 
index = tf.constant(2) 
list = [0,1,2,3,4] 

target = list[tf_look_up[index]] 

これにより、次のエラーメッセージが表示されます。

TypeError: list indices must be integers or slices, not Tensor 

テンソル付きインデックスリストの方法ですか?回避策ですか?

+0

テンソルをnumpyに変換するには、sess.runを使用してください。 –

+0

@YaroslavBulatovリストが動的に生成される場合はどうなりますか? RNNが生成する状態。どんな方法でも動的インデックス作成が機能しますか? – chentingpc

+0

@soloice answerのような 'tf.gather'ですか? –

答えて

0

私はこれが役立つと思う:「numpyの配列にテンソルから戻って変換するにはあなたは、単に変換テンソル上)(.evalを実行することができます」 How can I convert a tensor into a numpy array in TensorFlow?

+0

これは動作しますが、 "コンパイル時間"が劇的に増加します。 TensorFlowグラフの一部をあらかじめコンパイルする方法を知っていますか? – spreisel

+0

@ spreisel、残念ながら、私はしません。私は時間がエラーの欠如のために増加すると思いますか?私は確かに分からない、私はよくTFを知らない。 – Kelvin

1

Tensorflowは実際にHashTableをサポートしています。詳細はdocumentationを参照してください。ここで

、何を行う可能性は以下の通りです:

table = tf.contrib.lookup.HashTable(
    tf.contrib.lookup.KeyValueTensorInitializer(tf_look_up, list), -1) 

それからちょうど鍵が見つからない場合-1はデフォルト値であることを

target = table.lookup(index) 

注意を実行することにより、所望の入力を取得します。テンソルの設定に応じて、key_dtypevalue_dtypeをコンストラクタに追加する必要があります。

3

tf.gatherは、この目的のために設計されています。

tf.gather(list, tf_look_up[index])を実行するだけで、あなたが望むものを手に入れることができます。

関連する問題