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, num_classes]))
}
我的问题是:如何计算特征/通道输出的数量,在这种情况下,第一层是32,第二层是64,第三层是1024?如果我在CNN中添加多于或少于32,64,1024的数字会产生什么影响?
CNN模型的限制如下:
7x7
由输入图像大小决定。在这种情况下,它是在2次下采样(池化)操作之后的28x28
。32
,64
)的数量可以是任意的,但它必须对应于下一层的深度值。所以,如果你在32
中将48
更改为wc1
,你还必须在32
中将48
更改为wc2
。1024
中的wd1
必须与1024
中的out
相对应。除此之外,您可以设置任何值,但它可能会也可能不会提高网络性能。通常,研究将它们设置得尽可能大,以便模型仍然适合GPU内存,因为更大的模型往往更好地学习。同样有意义的是从早期层向下进一步增加尺寸,以捕获学习特征的复杂性,即第二层中的变化大于第一层中的变化。
作为过滤器的数量,例如32,64,128,1024是设计决策,模型设计者决定使用的过滤器数量。在这种情况下,你。通常使用2的幂2 ^ 5 = 32,2 ^ 6 = 64等。除了影响模型将具有的参数数量之外,不同数量的滤波器显然会对计算所需的操作数量产生影响。学习。
例如尺寸为5x5x1(高x宽x通道)的10个滤波器将具有(5 x 5 x 1 + 1)x 10 = 110参数进行训练。请注意,+ 1表示偏差项。
我建议阅读下面的内容,特别是关于ConvNet架构的部分。 http://cs231n.github.io/convolutional-networks/#architectures
对于卷积算术,我发现了“深度学习的卷积算法指南”资源丰富:https://arxiv.org/abs/1603.07285