-1

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

能否请给出解释的答案?谢谢

4

2 回答 2

1

没有降序与升序这样的规则。但大多数人遵循降序,但尽量在你的 fc 部分保留比你最后一个分类神经元更多的神经元

如果你看到 VGG16 拱门,最后一层的顺序是:4096 ,4096 ,1000。所以这里 1000 是第 1 层。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'))
于 2020-10-19T10:06:44.930 回答
1

TLDR:

您可以真正使用它们中的任何一个。但这取决于许多标准。

半长解释:

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

另一方面,当你到达网络的尽头时,你会想从你目前开发的所有特征中选择最好的特征,所以你开始逐渐减少神经元的数量,希望你能结束提供对您的特定任务很重要的最重要的功能。

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

于 2020-10-19T12:46:07.207 回答