我正在尝试详细了解NASNet-A架构,但无法与论文中的参数计数相匹配。
例如,该论文称CIFAR-10 NASNet-A“6 @ 768”模型具有3.3M参数,但根据我的计算,最终单元格中的单个“sep 5x5”原语应该单独具有2.9M参数...这可以没错!
以下是我如何得出这个数...
“6 @ 768”符号表示“网络倒数第二层中的过滤器数量”是768,我假设这意味着单元格中每个基本操作中的过滤器数量是768,因此concat操作的输出深度(具有5个块输入)是5 * 768.由于形状仅由缩小单元改变,因此最终单元的输入(来自先前正常单元的concat输出)也将具有深度5 * 768。 / p>
因此对于具有5 * 768输入通道和768输出通道的5x5可分离卷积,参数数量为:
对于5x5深度滤波器,5x5x1 *(5 * 768)= 96,00 params,再加上
对于1x1逐点滤波器,1x1x(5 * 768)x 768 = 2,949,128个参数
我哪里错了?!
答案 0 :(得分:2)
来自小区块的每个操作的输出通道的数量是根据定义的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