2016-11-01 4 views
2

tensorflow의 컨볼 루션 중립 네트워크가이 tutorial의 크기를 어떻게 계산하는지 잘 모르겠습니다. (h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)) Tensorflow 길쌈 네트워크 - 치수 (모양) 계산 방법은 무엇입니까?

  • 제 1 층의 형상 : 28 개 * 28 개 픽셀 (x_image = tf.reshape(x, [-1,28,28,1]))
  • 패치 사이즈가 5 × 5 인 (W_conv1 = weight_variable([5, 5, 1, 32])
  • 은 제 컨벌루션 층으로 이루어진다

    1. 이미지가있다 입니다 : h_pool1.get_shape()TensorShape([Dimension(10), Dimension(14), Dimension(14), Dimension(32)])

    Q1 : 첫 번째 차원은 10 왜?

    질문 2 : 왜 5x5 패치 크기로 치수가 14x14로 줄어들습니까? 28x28 이미지가 있고 모든 픽셀에 5x5 패치를 적용하면 14x14 이상을 기대할 수 있습니다.

    질문 3 : x_image 코드에서 -1은 무엇을합니까?

  • 답변

    4

    모양은 (batch_size, height, width, channel)입니다.

    1x. 10은 배치 크기입니다. 10 (

    x = tf.placeholder(tf.float32, shape=[None, 784]) 
    

    , 당신은 "치수 (없음)"을 BATCHSIZE있을 것이다 대신 차원 "의이 방법 : 튜토리얼 라인이지만

    x = tf.placeholder(tf.float32, shape=[10, 784]) 
    

    : 나는이 같은 라인을 가지고 생각) ".

    질문 2. Layer1은 컨볼 루션 계층과 최대 풀링 계층을 포함합니다. "SAME" padding의 컨볼 루션 계층은 동일한 크기의 내용을 출력합니다. 크기 축소는 "SAME"패딩이있는 (2/2, w/2) 2x2 max-pooling에서 발생합니다.

    def conv2d(x, W): 
        return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME') 
    
    def max_pool_2x2(x): 
        return tf.nn.max_pool(x, ksize=[1, 2, 2, 1], 
             strides=[1, 2, 2, 1], padding='SAME') 
    
    h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1) 
    h_pool1 = max_pool_2x2(h_conv1) 
    

    3. tf.reshape() with a single dimension "-1"은 총 크기가 동일하게 유지되도록 프로그램에서 자동으로 계산 한 치수를 유지합니다.

    관련 문제