2017-04-17 7 views
3

는 내가 tensorflow 에 대한 몇 가지 기본 사항을 이해하려고 노력했다 및 최대 풀링 2D 레이어에 대한 설명서를 읽는 동안 나는 붙어있어 :TensorFlow에서 Max Pooling 2D Layer의 출력 텐서는 무엇입니까?

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

conv1가있다 여기서 https://www.tensorflow.org/tutorials/layers#pooling_layer_1

이것은 max_pooling2d가 지정하는 방법입니다 모양이 [batch_size, image_width, image_height, channels] 인 텐서, 구체적으로이 경우는 [batch_size, 28, 28, 32]입니다.

우리의 입력은 모양이 텐서 인 : [batch_size, 28, 28, 32]입니다.

최대 풀링 2D 레이어에 대한 나의 이해는 크기가 pool_size (이 경우 2x2)이고 슬라이딩 윈도우가 stride (2x2)으로 이동한다는 것입니다. 즉, 이미지의 widthheight은 모두 절반이됩니다. 즉, 채널당 14x14 픽셀 (총 32 채널)로 끝납니다. 즉, 출력은 텐서 형태 ([batch_size, 14, 14, 32])입니다. 내가 여기 실종 무엇

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%. 

:

그러나, 위의 링크에 따라, 출력 텐서의 모양은 [batch_size, 14, 14, 1]입니까?

어떻게 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 최대 풀을 strides = 2x2로 사용하면 데이터가 반으로 줄어들며 출력 깊이는 변경되지 않습니다. 귀하의 주어진 테스트 코드입니다, 출력 모양은 (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

감사합니다. 나는 그 문서가 틀렸다고 생각한다. 즉, 오타가있는 것 같다. –