【问题标题】:CNN: understanding weights output channel argumentCNN:理解权重输出通道参数
【发布时间】:2017-12-12 13:54:24
【问题描述】:
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 的数字会产生什么影响?

【问题讨论】:

    标签: machine-learning tensorflow deep-learning conv-neural-network convolution


    【解决方案1】:

    这个CNN模型的限制如下:

    • 7x7 由输入图像大小决定。在本例中,经过 2 次下采样(池化)操作后为 28x28
    • conv层的特征数量(32,64)可以是任意的,但必须与下一层的深度值相对应。因此,如果您将wc1 中的32 更改为48,您还必须将wc2 中的32 更改为48
    • FC层的大小也一样:wd1中的1024必须对应out中的1024

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

    【讨论】:

      【解决方案2】:

      作为过滤器的数量,例如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

      对于卷积算术,我发现“深度学习卷积算术指南”资源丰富:https://arxiv.org/abs/1603.07285

      【讨论】:

        猜你喜欢
        • 2018-08-27
        • 2018-12-13
        • 1970-01-01
        • 1970-01-01
        • 2017-02-22
        • 2017-12-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多