【问题标题】:Getting wrong parameter count for Google NASNet-A neural netGoogle NASNet-A 神经网络的参数计数错误
【发布时间】:2017-11-19 04:54:29
【问题描述】:

我正在尝试详细了解 NASNet-A 架构,但无法匹配论文中的参数计数。

例如,论文说 CIFAR-10 NASNet-A“6 @ 768”模型有 330 万个参数,但根据我的计算,最后一个单元格中的单个“sep 5x5”原语应该有 290 万个参数……这可以不对!

我是这样得出这个计数的……

“6 @ 768”表示法表示“网络倒数第二层中的过滤器数量”为 768,我假设这意味着单元中每个原始操作中的过滤器数量为 768,因此concat 操作(具有 5 个块输入)的输出深度为 5 * 768。由于形状仅由归约单元更改,因此最终单元的输入(来自先前正常单元的 concat 输出)的深度也将是 5 * 768。

所以对于一个 5*768 输入通道和 768 输出通道的 5x5 可分离卷积,参数个数为:

5x5x1 * (5 * 768) = 5x5 深度过滤器的 96,00 参数,加上

1x1x(5 * 768) x 768 = 1x1 逐点过滤器的 2,949,128 个参数

我哪里错了?!

【问题讨论】:

    标签: tensorflow neural-network


    【解决方案1】:

    单元块的每个操作的输出通道数量根据定义的num_conv_filters。例如,CIFAR NASNet-A 为 32,并且在每个 Reduction Cell 之后加倍。

    虽然他们提到他们有 B=5 块并且没有残余连接,但似乎他们有 6 个串联的过滤器块,最后一个似乎来自前一层。 见:https://github.com/tensorflow/models/blob/d07447a3e34bc66acd9ba7267437ebe9d15b45c0/research/slim/nets/nasnet/nasnet_utils.py#L309

    这就是为什么例如您在第一个单元格中有 192 个特征深度: 6*32=192。 您可以在这里查看预期的深度: https://github.com/tensorflow/models/blob/d07447a3e34bc66acd9ba7267437ebe9d15b45c0/research/slim/nets/nasnet/nasnet_test.py#L127

    例如,对于最后一个5x5 separable convolution,您可以获得: 5x5*768 + 768*128 = 117504 个参数

    有关可分离卷积的更多信息: http://forums.fast.ai/t/how-depthwise-separable-convolutions-work/4249

    【讨论】:

      猜你喜欢
      • 2019-01-19
      • 2017-11-20
      • 2017-05-16
      • 2020-02-21
      • 1970-01-01
      • 1970-01-01
      • 2021-03-11
      • 2015-05-01
      • 2020-09-29
      相关资源
      最近更新 更多