machine-learning - 有人可以向我解释带有 tensorflow (手写数字)的卷积神经网络的设计吗? (输入图片: 28 x 28 | output : 10 (n_classes))

标签 machine-learning neural-network deep-learning conv-neural-network

我正在尝试开始 CNN 设计,我发现了这段代码,我尝试从中推断设计(f.maps 大小、步幅......)。

据我所知,我们有: 输入 --> Conv5-32 --> maxpool --> Conv5-5 --> maxpool --> fc1 --> 输出。

我不明白的是 fc1 的输入,为什么它是 7 x 7 ?

有人可以帮我吗? (我是初学者)

import tensorflow as tf

from tensorflow.examples.tutorials.mnist import input_data

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


#Parameters
learning_rate = 0.001
training_iters = 200000
batch_size = 28
display_step = 10


#Network Parameters

n_input = 784
n_output = 10
dropout  = 0.75

#tf grath input
x = tf.placeholder(tf.float32, [None,n_input])
y = tf.placeholder(tf.float32, [None, n_output])
keep_prob = tf.placeholder(tf.float32)



# Create some wrappers for simplicity
def conv2d(x, W, b, strides=1):
    # Conv2D wrapper, with bias and relu activation
    x = tf.nn.conv2d(x, W, strides=[1, strides, strides, 1], padding='SAME')
    x = tf.nn.bias_add(x, b)
    return tf.nn.relu(x)


def maxpool2d(x, k=2):
    # MaxPool2D wrapper
    return tf.nn.max_pool(x, ksize=[1, k, k, 1], strides=[1, k, k, 1],
                          padding='SAME')




# Create model
def conv_net(x, weights, biases, dropout):
    # Reshape input picture
    x = tf.reshape(x, shape=[-1, 28, 28, 1])

    # Convolution Layer
    conv1 = conv2d(x, weights['wc1'], biases['bc1'])
    # Max Pooling (down-sampling)
    conv1 = maxpool2d(conv1, k=2)

    # Convolution Layer
    conv2 = conv2d(conv1, weights['wc2'], biases['bc2'])
    # Max Pooling (down-sampling)
    conv2 = maxpool2d(conv2, k=2)

    # Fully connected layer
    # Reshape conv2 output to fit fully connected layer input
    fc1 = tf.reshape(conv2, [-1, weights['wd1'].get_shape().as_list()[0]])
    fc1 = tf.add(tf.matmul(fc1, weights['wd1']), biases['bd1'])
    fc1 = tf.nn.relu(fc1)
    # Apply Dropout
    fc1 = tf.nn.dropout(fc1, dropout)

    # Output, class prediction
    out = tf.add(tf.matmul(fc1, weights['out']), biases['out'])
    return out




# Store layers weight & bias
weights = {
    # 5x5 conv, 1 input, 32 outputs
    'wc1': tf.Variable(tf.random_normal([5, 5, 1, 32])),
    # 5x5 conv, 32 inputs, 64 outputs
    'wc2': tf.Variable(tf.random_normal([5, 5, 32, 5])),
    # fully connected, 7*7*64 inputs, 1024 outputs
    'wd1': tf.Variable(tf.random_normal([7*7*64, 1024])),
    # 1024 inputs, 10 outputs (class prediction)
    'out': tf.Variable(tf.random_normal([1024, n_classes]))
}

biases = {
    'bc1': tf.Variable(tf.random_normal([32])),
    'bc2': tf.Variable(tf.random_normal([64])),
    'bd1': tf.Variable(tf.random_normal([1024])),
    'out': tf.Variable(tf.random_normal([n_classes]))
}

最佳答案

这是因为最大池化。它将每个维度上的输入大小除以 2。

因此,在第一个最大池化之后,您的 28x28 变为 14x14,然后在第二个最大池化之后变为 7x7。

关于machine-learning - 有人可以向我解释带有 tensorflow (手写数字)的卷积神经网络的设计吗? (输入图片: 28 x 28 | output : 10 (n_classes)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38185475/

相关文章:

python - 似乎无法导入 scikit-learn 的 MLPRegressor

tensorflow - 如何处理 tensorflow 中的大(> 2GB)嵌入查找表?

r - 在 Caret 包中调整随机森林的两个参数

language-agnostic - 条件随机场——它们是如何工作的?

python - 模型使用 SGD 进行学习,但不使用 Adam

python - “float”类型错误 Python、pandas

python - MLP分类

machine-learning - 使用 CNN 进行二值图像分类 - 选择 "negative"数据集的最佳实践?

python - 期望 volvo2d_input_1 有 4 个维度,但得到形状为 (150, 150, 1) 的数组

machine-learning - 使用caffe从图像回归年龄时如何设计损失层