1. ホーム
  2. python

[解決済み] Tensorflow Strides Argument

2022-09-13 23:29:46

質問

を理解しようとしています。 ストライド 引数を理解しようとしています。

ドキュメント は繰り返し

のストライドです。長さ >= 4 の int のリスト。入力テンソルの各次元に対するスライディングウィンドウのストライドを指定する。

質問です。

  1. 4つ以上の整数はそれぞれ何を表すのでしょうか?
  2. なぜコンブネットでは strides[0] = strides[3] = 1 でなければならないのでしょうか?
  3. この例 を見ると tf.reshape(_X,shape=[-1, 28, 28, 1]) . なぜ-1?

悲しいことに、-1を使ったreshapeのドキュメントの例は、このシナリオにあまりうまく変換されません。

どのように解決するのですか?

プーリングと畳み込み演算は、入力テンソルに対してquot;window"をスライドさせる。 使用方法 tf.nn.conv2d を例とする。入力テンソルが4次元である場合 [batch, height, width, channels] の2次元窓で畳み込みを行う。 height, width の次元で動作します。

strides は、ウィンドウが各次元でどれだけ移動するかを決定します。 典型的な使用法では、最初(バッチ)と最後(深さ)のストライドを1に設定します。

非常に具体的な例を使ってみましょう。 32x32のグレイスケールの入力画像に対して2次元の畳み込みを実行します。 グレースケールと言ったのは、入力画像の深さが1であるためで、これは単純なことを維持するのに役立ちます。 その画像は次のようなものです。

00 01 02 03 04 ...
10 11 12 13 14 ...
20 21 22 23 24 ...
30 31 32 33 34 ...
...

1つの例に対して2x2のコンボリューションウィンドウを実行してみましょう(バッチサイズ=1)。 コンボリューションの出力チャンネル深度は8とします。

畳み込みの入力は shape=[1, 32, 32, 1] .

を指定した場合 strides=[1,1,1,1] と共に padding=SAME であれば、フィルタの出力は [1, 32, 32, 8] になります。

フィルタはまず、[1, 32, 8]の出力を作成します。

F(00 01
  10 11)

そして、for。

F(01 02
  11 12)

といった具合です。 そして、2行目に移動して計算することになります。

F(10, 11
  20, 21)

では

F(11, 12
  21, 22)

1, 2, 2, 1] と指定すると、ウィンドウの重なりを計算しません。 計算されます。

F(00, 01
  10, 11)

で、次に

F(02, 03
  12, 13)

ストライドはプーリング演算子でも同様に動作します。

質問2:なぜconvnetsのためにstride [1, x, y, 1]なのか?

最初の1がバッチです。 普通はバッチで例を飛ばしたくないというか、そもそも入れるべきじゃないですよね :)

最後の1つは畳み込みの深さです。 同じ理由で、通常は入力を飛ばしたくありません。

conv2d演算子はより一般的なもので、例えば ができました。 しかし、これはコンボネットの典型的な使用法ではありません。 典型的な使い方は、空間的に使用することです。

なぜ -1 にリシェイプするのか -1は、quot;フルテンソルに必要なサイズに合わせるために必要に応じて調整する、というプレースホルダーです。これは、パイプラインを変更しても、コード内のあらゆる場所でバッチサイズを調整する必要がないように、コードを入力バッチサイズから独立させる方法です。