2017-06-26 5 views
3

スライスしたい[3.0,33.0]。次のコードでこのスライスにアクセスしようとしました。私はtf.sliceコマンドについてはあまり明確ではない。私は、このコマンドについての文書で言及されている開始とサイズについてはあまり明確ではない。誰かが理解しやすいようにしてください。テンソルの一部をスライスする方法は?

batch = tf.constant([ 
    [#First image 
    [[0.0,10.0],[1.0,11.0]], 
    [[3.0,33.0],[4.0,44.0]] 
    ], 
    [#Second image 
    [[5.0,55.0],[6.0,66.0]], 
    [[7.0,77.0],[8.0,88.0]] 
    ] 
]) 
slice1 = tf.slice(batch,[0,0,0,0], [0,0,1,0]) 
sess = tf.InteractiveSEssion() 
sess.run(tf.initialize_all_variables()) 
print slice1.eval() 

答えて

3

私は例を使用してコードを説明しますので、私はいくつかのケースを作成しましたが、最初にすべての私はあなたにtf.slice(input, begin, size) paramettersを説明します:

  • inputはテンソルへのREFです。
  • beginは、スライスのインデックスです。
  • sizeは、スライスのオフセットです。

inputからインデックスベクトルとしてbeginsizeの治療、begin + sizebeginインデックスと終了時に始まり、サブテンソルを選択するので、tf.slice作品。以下の例はこのことを明らかにする:この場合

batch = tf.constant([ 
     [#First image 
      [ 
       [0.0,10.0], 
       [1.0,11.0] 
      ], 
      [ 
       [3.0,33.0], 
       [4.0,44.0] 
      ] 
     ], 
     [#Second image 
      [ 
       [5.0,55.0], 
       [6.0,66.0] 
      ], 
      [ 
       [7.0,77.0], 
       [8.0,88.0] 
      ] 
     ] 
    ]) 
slice1 = tf.slice(batch,[0,0,0,0], [1,1,1,1]) 
slice2 = tf.slice(batch,[0,1,0,0], [1,1,2,2]) 
slice3 = tf.slice(batch,[1,1,1,0], [1,1,1,2]) 
slice4 = tf.slice(batch,[0,0,0,0], [2,2,2,2]) 
sess = tf.InteractiveSession() 
print("slice1: \n" + str(slice1.eval()) + "\n") 
print("slice2: \n" + str(slice2.eval()) + "\n") 
print("slice3: \n" + str(slice3.eval()) + "\n") 
print("slice4: \n" + str(slice4.eval()) + "\n") 

出力がある:それは[0,0,0,0]で始まり、一つの要素を選ぶのため

slice1: 
[[[[ 0.]]]] 

slice2: 
[[[[ 3. 33.] 
    [ 4. 44.]]]] 

slice3: 
[[[[ 8. 88.]]]] 

slice4: 
[[[[ 0. 10.] 
    [ 1. 11.]] 

    [[ 3. 33.] 
    [ 4. 44.]]] 


[[[ 5. 55.] 
    [ 6. 66.]] 

    [[ 7. 77.] 
    [ 8. 88.]]]] 
  • slice1は、テンソルの最初の要素を選択します。
  • slice2は、[0,1,0,0]で始まり、2つの第1次元で1要素を選択し、3次元および4次元で2要素を選ぶため、テンソルの最初の要素を選択します。
  • slice3は、[1,1,1,0]で始まり、最初の3つの次元で1つの要素と最後の2つの要素のみを選択するため、テンソルの最初の要素を選択します。それは寸法のデ数は、すべてのスライドに同じであることをすべてのテンソル

注意を覆うように、それは、寸法によって[0,0,0,0]と二つの要素から始まりのため

  • slice4はテンソルのすべての要素を選択します。要素が1つしかないディメンションを削除する場合は、tf.squeezeを使用できます。

  • +0

    このような詳細な説明をいただきありがとうございます – rida

    関連する問題