CNN中致密层中的神经元数量

时间:2020-10-18 18:31:55

标签: deep-learning neural-network artificial-intelligence cnn bias-neuron

我想问你一个有关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'))

也可以给出解释的答案吗? 谢谢

2 个答案:

答案 0 :(得分:1)

没有降序与升序的规则。但是大多数人跟随下降,但是要设法使fc部分中的神经元数量比最后分类的神经元更多

如果看到VGG16拱形,则最后一层按以下顺序排列: 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'))

答案 1 :(得分:0)

TLDR:

您可以真正使用其中任何一个。但这取决于很多标准。

半长说明:

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

另一方面,当您到达网络的末端时,您希望从迄今为止开发的所有功能中选择最佳的功能,因此您开始逐渐减少神经元的数量,因此希望您最终将获得与您的特定任务相关的最重要的功能。

不同的建筑设计具有不同的含义,并且基于对当前任务的不同理解。您需要根据自己的需求选择最佳策略。