当前位置:  开发笔记 > 人工智能 > 正文

TensorFlow ConvNet中完全连接的层重量尺寸

如何解决《TensorFlowConvNet中完全连接的层重量尺寸》经验,为你挑选了1个好方法。

我一直在使用TensorFlow中卷积网的这个例子进行编码,我对这种权重分配感到困惑:

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, 64])), 

# 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])) 

}

我们怎么知道'wd1'权重矩阵应该有7 x 7 x 64行?

它后来用于重塑第二个卷积层的输出:

# Fully connected layer
# Reshape conv2 output to fit dense layer input
dense1 = tf.reshape(conv2, [-1, _weights['wd1'].get_shape().as_list()[0]]) 

# Relu activation
dense1 = tf.nn.relu(tf.add(tf.matmul(dense1, _weights['wd1']), _biases['bd1']))

根据我的数学,汇集第2层(conv2输出)有4 x 4 x 64个神经元.

我们为什么要重塑为[-1,7*7*64]?



1> dga..:

从一开始就在工作:

输入_X的大小[28x28x1](忽略批量维度).28x28灰度图像.

第一个卷积层使用PADDING=same,因此它输出一个28x28层,然后传递给max_poolwith k=2,它将每个维度减少两倍,从而产生14x14的空间布局.conv1有32个输出 - 所以现在是完整的每个示例张量[14x14x32].

这是重复的conv2,有64个输出,导致a [7x7x64].

tl; dr:图像以28x28开始,每个maxpool在每个维度中将其减少两倍.28/2/2 = 7.

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有