2016-02-02 17 views
26

この質問はテンソル内の個々の要素にアクセスすることに関して言います。[[1,2,3]]。私は内部要素[1,2,3]にアクセスする必要があります(これは.eval()またはsess.run()を使用して実行できます)が、テンソルのサイズが大きいと時間がかかります)Tensorflow python:テンソル内の個々の要素にアクセスする

任意の方法は、同じ高速を行うには?

ありがとうございました。

答えて

0

私はそれが1つの要素にアクセスするのではなく、時間がかかる残りの計算だと思っています。

また、メモリに保存されているものをコピーする必要があるかもしれません。そのため、グラフィックスカード上にある場合はまずRAMにコピーしてから要素にアクセスする必要があります。このような場合は、テンソルフロー演算を追加して最初の要素を取得し、それを返すことでスキップすることができます。

36

テンソル内の要素のサブセットにアクセスするには、主に2つの方法がありますが、どちらもあなたの例で有効です。

  1. テンソルから隣接スライスを抽出する(tf.slice()に基づく)インデキシング演算子を使用。

    input = tf.constant([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) 
    
    output = input[0, :] 
    print sess.run(output) # ==> [1 2 3] 
    

    インデックス作成演算子は、NumPyと同じスライス仕様の多くをサポートしています。

  2. tf.gather() opを使用して、テンソルから不連続スライスを選択します。

    input = tf.constant([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) 
    
    output = tf.gather(input, 0) 
    print sess.run(output) # ==> [1 2 3] 
    
    output = tf.gather(input, [0, 2]) 
    print sess.run(output) # ==> [[1 2 3] [7 8 9]] 
    

    あなたが適切な要素を取得するためにtf.reshape()またはtf.transpose()ご入力する必要があるかもしれませんので、tf.gather()のみ、0番目の次元(マトリックスの例では、全体の行)で、全体のスライスを選択することができますことに注意してください。

+1

"..あなたは適切な要素を得るために入力をtf.reshape()またはtf.transpose()する必要があります。 - >または 'tf.gather_nd'を使う? –

1

あなたは、単に[[1,2,3]]実行せずに()の0番目の要素の値取得することはできません - 寧やeval() - それを得ることになる操作をINGのを。 '実行'または '評価'の前には、この内部要素を取得する方法について説明するだけです(TFは記号グラフ/計算を使用するため)。したがって、tf.gather/tf.sliceを使用する場合でも、の値をeval/runで取得する必要があります。 @ mrryの答えを見てください。

関連する問題