2017-05-26 5 views
0

テンソルフローチュートリアルで深いmnistを学ぶと、入力画像に畳み込み、プールした後の出力サイズに関する問題があります。チュートリアルでは、我々は見ることができます: 入力画像に畳み込み、プールした後の出力サイズを計算する方法

W_conv1 = weight_variable([5, 5, 1, 32]) 
b_conv1 = bias_variable([32]) 
x_image = tf.reshape(x, [-1,28,28,1]) 

We then convolve x_image with the weight tensor, add the bias, apply 
the ReLU function, and finally max pool. The max_pool_2x2 method 
will reduce the image size to 14x14. 

h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1) 
h_pool1 = max_pool_2x2(h_conv1) 

は、私は、入力された画像を処理するための2つの段階があると思い:ファースト・コンボリューションと第二の最大のプールが!畳み込み後、出力サイズは(28-5 + 1)*(28-5 + 1)= 24 * 24です。最大プールへの入力のサイズは24 * 24です。プールサイズが2 * 2の場合、出力サイズは14 * 14ではなく(24/2)*(24/2)= 12 * 12になります。それは理にかなっていますか? pleaeは、畳み込みとプールの後に出力サイズを計算する方法の詳細を教えてくれます。どうもありがとう。 次の図は、CNNのプロセスです。 image of the CNN process

私は既に問題がどこにあるのか理解しています。

def conv2d(x, W): 
    return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME') 

パディング= 'SAME'は、出力サイズが入力サイズ----イメージサイズと同じであることを意味します。そして、畳み込み後、出力サイズは28 * 28であり、最終出力サイズはプール後(28/2)*(28/2)= 14 * 14です。しかし、「SAME」=パディングに関する次のコードを説明する方法:

def max_pool_2x2(x): 
    return tf.nn.max_pool(x, ksize=[1, 2, 2, 1], 
        strides=[1, 2, 2, 1], padding='SAME') 
+0

tensorflowのチュートリアルはここにある:問題がどこにあるhttps://www.tensorflow.org/get_started/mnist/pros#build_a_multilayer_convolutional_network – WangYang

+0

は、私はすでに理解しています。 – WangYang

答えて

1

畳み込み層の出力サイズは、使用パディングアルゴリズムに依存します。チュートリアルでは、「コンボリューションとプール」セクションにあるように、埋め込み方法はsameです。つまり、出力形状は入力形状と同じであり、入力には元の入力の外側にゼロが埋め込まれています。

埋め込みアルゴリズムvalidを使用すると、出力形状の見積もりはtrueになります。

+0

私はそれを理解しています。どうもありがとう。テンソルフローAPIをもっと慎重に読んでください。 – WangYang

+0

あなたがそれを知っていれば、テンソルフローAPIの詳細な説明がどこにあるのか教えてください。私はテンソルフローについての新入生です。再度、感謝します。 – WangYang

+0

見た目の標準的な場所はもちろん、公式の[APIドキュメント](https://www.tensorflow.org/api_docs/python/tf/nn/conv2d)です。さまざまな畳み込みの良い説明は、[Theano documention](http://deeplearning.net/software/theano/tutorial/conv_arithmetic.html) – dseuss

0

に例を取ることができます。

テンソルのサイズや形状(幅= 28、高さ= 28)

畳み込みフィルタサイズ(F):(F_width = 5、F_height = 5)

パディング(P):0

パディングアルゴリズム:VALID(これは、出力サイズが変化し得ることを意味する)

ストライド(S):1

方程式を使用する:

出力幅=((W-F + 2 * P)/ S)+1

出力幅=((28-5 + 2 * 0)/ 1)+ 1

出力幅= 24

出力の高さが同じであることを考慮すると、同じ答えが有効です。

出力の次元は(24,24)になります。

ただし、パディングアルゴリズムが「同じ」に設定されている場合、出力のサイズは元の入力のサイズと同じです。

また、プールは「フィルタ」の形式であることを覚えておいてください。したがって、上記のフィルタ式は適用可能です。

だから、同じ式を使用して2のストライドでプール2×2は、(((W-F + 2 * P)/ S)+1)私たちを与える:

=((28-2 + 2 * 0)/ 2)+ 1 =(2分の26)+1 =(13)+1 = 14

ここで私は一度Quoraのに投稿回答へのリンクです。

https://www.quora.com/How-can-I-calculate-the-size-of-output-of-convolutional-layer/answer/Rockson-Agyeman

関連する問題