テンソルフローチュートリアルで深い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')
tensorflowのチュートリアルはここにある:問題がどこにあるhttps://www.tensorflow.org/get_started/mnist/pros#build_a_multilayer_convolutional_network – WangYang
は、私はすでに理解しています。 – WangYang