2017-05-02 5 views
1

テンソルの要素には別のインデックスリストをアクセスする必要がありますが、現在は単純な構文では不可能です。私はそれがバグかどうか分からなかったので、私はうまくいけば私の構文を修正するためにここに投稿します。テンソルの要素にテンソルフローの別のインデックスリストを使用してアクセスする

import tensorflow as tf 
import numpy as np 

sess = tf.Session() 
input = tf.constant([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) 
idx_list = np.array([0,2]) 
output = input[:, idx_list] 

print(sess.run(output)) 

しかし、私はエラーを取得する:私のコードがある

ValueError: Shapes must be equal rank, but are 0 and 1 From merging shape 0 with other shapes. for 'strided_slice/stack_1' (op: 'Pack') with input shapes: [], [2].

tensorflowの私のインストールバージョン(インストールをPIP)tensorflow-1.1.0-cp35です。

更新:

私はtf.fn_mapでこの操作を行うが、私は本当にそれを疑うが、インデックス作成を行うための正しい方法である:

output = tf.transpose(tf.map_fn(lambda x: input[:,x], idx_list),perm=[1,0]) 

はアップデート:あり

具体的にはissue registeredであり、最新のコメントに役立つ素敵なスニペットが付いています。一方、この操作は、次のようにあなたがtf.gathertf.transposeを使用してそれを行うことができます...

答えて

0

numpyのように簡単ではありません。

import tensorflow as tf 
import numpy as np 

sess = tf.Session() 
input = tf.constant([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) 
idx_list = np.array([0,2]) 
output = tf.transpose(tf.gather(tf.transpose(input),idx_list)) 
output.eval(session=sess) 

これは

array([[1, 3], 
     [4, 6], 
     [7, 9]]) 
+0

感謝を印刷します! githubで問題がまだ表示されていない場合は、自分のアップデートを参照してください。 –

関連する問題