質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%

Q&A

解決済

1回答

3749閲覧

ストライドがなぜ4次元なのか?

oscikonome

総合スコア16

0グッド

0クリップ

投稿2017/12/11 03:45

CNNでMNISTデータを学習している以下を読んでいます
https://www.tensorflow.org/get_started/mnist/pros

1.畳み込みやプーリング、および画像データのreshape時において
strides=[1, 1, 1, 1]
ksize=[1, 2, 2, 1]
x_image = tf.reshape(x, [-1, 28, 28, 1])
のような表記があります。
2つ目は縦幅、3つ目は横幅、4つ目はチャンネル(色)というのはわかったのですが、1つ目の数値は何を表す情報なのでしょうか?

2.paddingについて
畳み込み時のpadding='SAME'は、入力と出力が同じサイズになるように、枠とストライドを見ながらうまいように0埋めする、という意味かと思います。
ですが、プーリングの時には2×2の枠で見ていき、28×28が14×14になっているような表記にもかかわらず、padding='SAME'となっているのはどういうことでしょうか?
また、padding='VALID'はどういうパディングなのでしょうか?

よろしくお願い致します

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

  1. 一番わかり易い説明は公式ページです。

https://www.tensorflow.org/versions/master/api_guides/python/nn#Convolution
1つ目はバッチサイズです。
https://stackoverflow.com/questions/34642595/tensorflow-strides-argument

  1. poolingのデフォルトはstrides=pool_sizeですので、ダウンサンプリングされて小さくなります。

strides=(1, 1)にすると26x26になり、padding='same'だとゼロパディングされて28x28になります。
アルゴリズムの詳細はご自分で確認していただくとして、pool_sizeで割り切れないようなデータを与えたときの振る舞いが異なります。'same'は切り上げ、'valid'は切り捨てになるはずです。
28x28 -(3, 3)/'same'-> 10x10
28x28 -(3, 3)/'valid'-> 9x9
https://qiita.com/tadOne/items/48302a399dcad44c69c8

投稿2017/12/11 05:05

編集2017/12/11 05:06
mkgrei

総合スコア8560

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

oscikonome

2017/12/11 08:14

1.畳み込みは、画像の移動や回転に対して強くなるものという認識です。バッチサイズということは複数の画像がつながっている場合・・・立体の断面図(ルービックキューブのような?)・・・に、バッチサイズを指定したりするということでしょうか。普通に2次元の画像認識であればバッチサイズは1固定でよいのかと思います。 2.SAMEは、枠のサイズとストライドによって、ピクセルごとに参照回数が変わらないように(同じになるように)パディングする、ということですね。サイズとストライドによっては(SAMEを指定しても)入力サイズと出力サイズが同じになるとは限らない、と VALIDはパディングなしで、枠のサイズとストライドで取れる分だけ取る、イメージでしょうか
mkgrei

2017/12/11 08:48

ともに、仰る通りです。 バッチサイズに1以外を入れる意味は無いと思います。 どなたか1以外を使うケースをご存知かもしれませんが。 ただ、次元の問題に関わるので、暗黙のルールとして省略するのは好ましくないと、数学・CS系のプロなら思うのかもしれません。今後何かのネットワークで1以外を使えるように汎用性高くしているとも。 エンドユーザーで使いやすいようなKerasでは、(W, H)だけになっているはずです。チャンネルも入力から得られますから… SAMEはフィルタによって失われた分は自動的にゼロパディングしてくれますが、ストライドはケアしてくれません。縦横半分にしたいのに、情報の3/4を0で埋めるのは無駄だと考えたのかもしれません。 VALIDはゼロパディングを含まない要素で最大に取れる分だけしか取らないということですね。
oscikonome

2017/12/11 09:23

ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問