2016-11-01 2 views
2

Я не уверен, как сверточная нейтральная сеть в тензорном потоке вычисляет размер в этом tutorial.Сверточная сеть тензора - как вычисляется размер (форма)?

  1. Образ 28 * 28 пикселей (x_image = tf.reshape(x, [-1,28,28,1]))
  2. Размер патч 5x5 (W_conv1 = weight_variable([5, 5, 1, 32])
  3. Первый сверточного слой делается: (h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1))
  4. форма первого слоя является: h_pool1.get_shape() и TensorShape([Dimension(10), Dimension(14), Dimension(14), Dimension(32)])

Q1: Почему первый размер составляет 10?

Q2: Почему размер патча 5x5 уменьшает размер до 14x14? Если у меня есть изображение 28x28, и я применяю патч 5x5 для всех пикселей, я ожидал бы больше 14x14.

Q3: Что делает -1 делать в коде x_image?

ответ

4

Формы (batch_size, высота, ширина, канал).

Q1. 10 - ваш размер партии. Я предполагаю, что у вас есть линии, как это:

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

В то время как в учебнике линия:

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

Таким образом, вы будете иметь BATCHSIZE "Размер (None)" вместо «Dimension (10)».

Q2. Layer1 включает слой свертки и слой с максимальным пулом. Сверточный слой с "SAME" padding выведет что-то с тем же размером. Уменьшение размера происходит из 2x2 max-pooling с дополнением «SAME», которое выводит (h/2, w/2).

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) 

Q3. tf.reshape() with a single dimension "-1" оставляет размер, автоматически рассчитываемый программой, так что общий размер остается неизменным.

Смежные вопросы