2017-04-17 13 views
3

私はtensorflow に関するいくつかの基本を理解しようとしていたとmaxは、2Dレイヤーをプールするためのドキュメントを読みながら、私は行き詰まっ:https://www.tensorflow.org/tutorials/layers#pooling_layer_1TensorFlowでMax Pooling 2D Layerの出力テンソルとは何ですか?

これはmax_pooling2dが指定されている方法です:

conv1があり

pool1 = tf.layers.max_pooling2d(inputs=conv1, pool_size=[2, 2], strides=2)

テクスチャ形状が[batch_size, image_width, image_height, channels]、具体的には[batch_size, 28, 28, 32]です。

だから、私たちの入力は、形状テンソルである:[batch_size, 28, 28, 32]

max poolingの2Dレイヤーについては、pool_size(この場合は2x2)のフィルタを適用し、スライディングウィンドウをstride(2x2)で移動することを理解しています。 [batch_size, 14, 14, 32]:これは、画像の双方widthheight、すなわち我々は出力形状のテンソルである意味、チャネル当たり14x14画素(合計32チャネル)で終わるであろうhalfedされることを意味します。

しかし、上記のリンクによると、出力テンソルの形状が[batch_size, 14, 14, 1]されています。私はここで何をしないのです

Our output tensor produced by max_pooling2d() (pool1) has a shape of 
[batch_size, 14, 14, 1]: the 2x2 filter reduces width and height by 50%. 

はどのように32を1に変換されましたか?

彼らは後に、ここで同じロジック適用されます。https://www.tensorflow.org/tutorials/layers#convolutional_layer_2_and_pooling_layer_2

を今回はそれがすなわち[batch_size, 14, 14, 64]は、(チャンネル数が同じである)[batch_size, 7, 7, 64]なり、正しいです。

答えて

3

はい、進歩と2x2の最大のプールを使用する= 2×2が半分にデータを削減する、と出力の深さは変更されません。これはあなたの与えられた私のテストコードです、出力形状は(14, 14, 32)、多分何か間違っていますか?

#!/usr/bin/env python 

import tensorflow as tf 
from tensorflow.examples.tutorials.mnist import input_data 

mnist = input_data.read_data_sets('./MNIST_data/', one_hot=True) 

conv1 = tf.placeholder(tf.float32, [None,28,28,32]) 
pool1 = tf.layers.max_pooling2d(inputs=conv1, pool_size=[2,2], strides=2) 
print pool1.get_shape() 

出力は次のようになります。答えを

Extracting ./MNIST_data/train-images-idx3-ubyte.gz 
Extracting ./MNIST_data/train-labels-idx1-ubyte.gz 
Extracting ./MNIST_data/t10k-images-idx3-ubyte.gz 
Extracting ./MNIST_data/t10k-labels-idx1-ubyte.gz 
(?, 14, 14, 32) 
+0

感謝。私はドキュメントが間違っていると思います。つまり、タイプミスがありますか? –

関連する問題