CNN:了解权重输出通道参数

CNN: understanding weights output channel argument

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

我的问题是: 我如何计算 feature/channel 输出的数量,在这种情况下,第一层为 32,第二层为 64,第三层为 1024?如果我在 CNN 中添加多于或少于 32、64、1024 的数字会产生什么影响?

此CNN模型的限制如下:

  • 7x7由输入图片大小决定。在这种情况下,它是 28x28 在 2 次下采样(池化)操作之后。
  • conv层的特征数(3264)可以任意,但必须对应下一层的深度值。因此,如果您将 32 更改为 48 in wc1,则还必须将 32 更改为 48 in wc2.
  • FC层的大小相同:wd1中的1024必须对应out中的1024

除此之外,您可以设置任何值,尽管它可能会也可能不会提高网络性能。通常研究将它们设置得尽可能大,以便模型仍然适合 GPU 内存,因为更大的模型往往学得更好。从早期层往下增加尺寸也是有意义的,以捕捉所学特征的复杂性,即第二层的多样性比第一层大。

作为过滤器的数量,例如32、64、128、1024 是设计决定,模型设计者决定使用的滤波器数量。在这种情况下,你。通常使用 2 的幂 2^5 = 32、2^6 = 64 等。不同数量的滤波器显然会影响计算所需的操作数量,此外还会影响模型必须的参数数量学。

例如10 个尺寸为 5x5x1(高 x 宽 x 通道)的过滤器将有 (5 x 5 x 1 + 1) x 10 = 110 个参数进行训练。请注意,+ 1 是偏差项。

我建议阅读以下内容,尤其是关于 ConvNet 架构的部分。 http://cs231n.github.io/convolutional-networks/#architectures

对于卷积运算,我发现 "A guide to convolution arithmetic for deep learning" 足智多谋:https://arxiv.org/abs/1603.07285