【发布时间】:2017-06-25 21:20:45
【问题描述】:
我正在关注 Vincent Vanhoucke 的 Udacity 深度学习视频,并试图了解最大池化的(实际的或直观的或明显的)效果。
假设我当前的模型(没有池化)使用步长为 2 的卷积来降低维度。
def model(data):
conv = tf.nn.conv2d(data, layer1_weights, [1, 2, 2, 1], padding='SAME')
hidden = tf.nn.relu(conv + layer1_biases)
conv = tf.nn.conv2d(hidden, layer2_weights, [1, 2, 2, 1], padding='SAME')
hidden = tf.nn.relu(conv + layer2_biases)
shape = hidden.get_shape().as_list()
reshape = tf.reshape(hidden, [shape[0], shape[1] * shape[2] * shape[3]])
hidden = tf.nn.relu(tf.matmul(reshape, layer3_weights) + layer3_biases)
return tf.matmul(hidden, layer4_weights) + layer4_biases
现在我介绍了池化:用步幅为 2 且内核大小为 2 的最大池化操作 (nn.max_pool()) 替换步幅。
def model(data):
conv1 = tf.nn.conv2d(data, layer1_weights, [1, 1, 1, 1], padding='SAME')
bias1 = tf.nn.relu(conv1 + layer1_biases)
pool1 = tf.nn.max_pool(bias1, [1, 2, 2, 1], [1, 2, 2, 1], padding='SAME')
conv2 = tf.nn.conv2d(pool1, layer2_weights, [1, 1, 1, 1], padding='SAME')
bias2 = tf.nn.relu(conv2 + layer2_biases)
pool2 = tf.nn.max_pool(bias2, [1, 2, 2, 1], [1, 2, 2, 1], padding='SAME')
shape = pool2.get_shape().as_list()
reshape = tf.reshape(pool2, [shape[0], shape[1] * shape[2] * shape[3]])
hidden = tf.nn.relu(tf.matmul(reshape, layer3_weights) + layer3_biases)
return tf.matmul(hidden, layer4_weights) + layer4_biases
除了提高准确性之外,我们使用后一种模型而不是无池模型的令人信服的原因是什么?很想听听已经多次使用 cnn 的人的一些见解!
【问题讨论】:
-
在您的示例中,您不想返回
tf.matmul(poo2, ...否则网络不包含最后一个池化层,对吧?
标签: tensorflow deep-learning conv-neural-network