`tf.strided_slice()` は何をしますか? 質問する

`tf.strided_slice()` は何をしますか? 質問する

オペレーターが実際に何をするのか知りたいですtf.strided_slice()
ドキュメント言う、

まず、この操作は、begin で指定された位置から始まるテンソル入力から、サイズ end - begin のスライスを抽出します。スライスは、すべての次元が end 未満でなくなるまで、stride を begin インデックスに追加して続行されます。stride のコンポーネントは負になる可能性があり、その場合、逆スライスが発生することに注意してください。

そしてサンプルでは、

# 'input' is [[[1, 1, 1], [2, 2, 2]],
#             [[3, 3, 3], [4, 4, 4]],
#             [[5, 5, 5], [6, 6, 6]]]
tf.slice(input, [1, 0, 0], [2, 1, 3], [1, 1, 1]) ==> [[[3, 3, 3]]]
tf.slice(input, [1, 0, 0], [2, 2, 3], [1, 1, 1]) ==> [[[3, 3, 3],
                                                       [4, 4, 4]]]
tf.slice(input, [1, 1, 0], [2, -1, 3], [1, -1, 1]) ==>[[[4, 4, 4],
                                                        [3, 3, 3]]]

私がこのドキュメントを理解している限りでは、最初のサンプル(tf.slice(input, begin=[1, 0, 0], end=[2, 1, 3], strides=[1, 1, 1]))は、

  • 結果のサイズは ですend - begin = [1, 1, 3]。サンプルの結果は[[[3, 3, 3,]]]、形状は であり[1, 1, 3]、問​​題ないようです。
  • 結果の最初の要素は ですbegin = [1, 0, 0]。サンプル結果の最初の要素は3、つまり なのでinput[1,0,0]、問題ないようです。
  • スライスは、開始インデックスに stride を追加して続行されます。したがって、結果の 2 番目の要素は になるはずですinput[begin + strides] = input[2, 1, 1] = 6が、サンプルでは 2 番目の要素が であることが示されています3

strided_slice()をするのですか?

(注記:サンプル内のメソッド名と最後の例は正しくありません

ベストアンサー1

私はこの方法を少し実験してみましたが、いくつかの洞察が得られました。これは役に立つと思います。テンソルがあるとします。

a = np.array([[[1, 1.2, 1.3], [2, 2.2, 2.3], [7, 7.2, 7.3]],
              [[3, 3.2, 3.3], [4, 4.2, 4.3], [8, 8.2, 8.3]],
              [[5, 5.2, 5.3], [6, 6.2, 6.3], [9, 9.2, 9.3]]]) 
# a.shape = (3, 3, 3)

strided_slice()には4 つの必須引数が必要で、引数としてinput_, begin, end, strides指定します。 メソッドの場合と同様に、引数は 0 ベースで、残りの引数はシェイプ ベースです。ainput_tf.slice()beginしかし、ドキュメントでbeginend両方ともゼロベースです

メソッドの機能は非常にシンプルです。
ループを反復処理するように動作します。 はbeginループが開始されるテンソル内の要素の位置で、endはループが停止する場所です。

tf.strided_slice(a, [0, 0, 0], [3, 3, 3], [1, 1, 1])

# output =  the tensor itself

tf.strided_slice(a, [0, 0, 0], [3, 3, 3], [2, 2, 2])

# output = [[[ 1.   1.3]
#            [ 7.   7.3]]
#           [[ 5.   5.3]
#            [ 9.   9.3]]]

stridesループが繰り返されるステップのようなもので、ここでは、[2,2,2]makes メソッドはテンソル内の (0,0,0)、(0,0,2)、(0,2,0)、(0,2,2)、(2,0,0)、(2,0,2) ..... から始まる値を生成aします。

tf.strided_slice(input3, [1, 1, 0], [2, -1, 3], [1, 1, 1]) 

tf.strided_slice(input3, [1, 1, 0], [2, 2, 3], [1, 1, 1])テンソルaが であるため、に似た出力が生成されますshape = (3,3,3)

おすすめ記事