CNN 中密集层的神经元数量

Number of neurons in dense layer in CNN

我想问你一个关于 CNN 中使用的密集层中使用的神经元数量的问题。 据我所知,在密集层中通常使用了 16、32、64、128、256、512、1024、2048 个神经元。 那么在输出层之前是降序还是升序更好?

例如

model.add(Dense(2048,kernel_regularizer='l2' ,activation='relu'))
model.add(Dense(1024,kernel_regularizer='l2' ,activation='relu'))
model.add(Dense(512,kernel_regularizer='l2' ,activation='relu'))
model.add(Dense(128,kernel_regularizer='l2' ,activation='relu'))

model.add(Dense(128,kernel_regularizer='l2' ,activation='relu'))
model.add(Dense(512,kernel_regularizer='l2' ,activation='relu'))
model.add(Dense(1024,kernel_regularizer='l2' ,activation='relu'))
model.add(Dense(2048,kernel_regularizer='l2' ,activation='relu'))

能不能也给个解释说明一下? 谢谢

没有降序和升序之分。但大多数人跟随下降,但尽量在你的 fc 部分保持比你最后一个分类神经元更多的神经元数量

如果你看到 VGG16 arch,最后一层的顺序是:4096 ,4096 ,1000。所以这里的 1000 是第一个。 imagenet 数据集中 类 个。

在您的情况下,您可以按照以下步骤操作:

model.add(Dense(2048,kernel_regularizer='l2' ,activation='relu'))
model.add(Dense(1024,kernel_regularizer='l2' ,activation='relu'))
model.add(Dense(512,kernel_regularizer='l2' ,activation='relu'))
model.add(Dense(128,kernel_regularizer='l2' ,activation='relu'))
model.add(Dense(number_classes ,activation='softmax'))

TLDR:

你真的可以使用它们中的任何一个。但这取决于许多条件。

半长解释:

您可以使用其中任何一个,但它们具有不同的含义。 基本上,您希望神经元的数量随着特征图尺寸的减小而增加,以保持几乎相同的表征能力。情况也是如此,当涉及到开发更抽象的功能时,我将在稍后讨论。
这就是为什么你在很多论文中看到,它们在网络开始时从一个小数字开始,然后逐渐增加。
这背后的直觉是,早期层处理原始概念,因此拥有大量神经元在某些时候并不会真正受益,但随着你深入,抽象的层次结构变得越来越丰富,你会想要成为能够 尽可能多地捕获信息并更好地创建新的 /higher/richer abstaractions。这就是为什么随着深度的增加,神经元会增加。

另一方面,当你到达网络的末端时,你会想从你目前开发的所有特征中选择最好的特征,所以你开始逐渐减少神经元的数量所以希望您最终会获得对您的特定任务至关重要的最重要的功能。

不同的架构设计具有不同的含义,并且基于对手头任务的不同直觉。您需要根据自己的需要选择最佳策略。