如何为图像分类问题的卷积神经网络中的Dense层选择单元数?

from keras import layersfrom keras import modelsmodel = models.Sequential()model.add(layers.Conv2D(32, (3, 3), activation='relu',input_shape=(150, 150, 3)))model.add(layers.MaxPooling2D((2, 2)))model.add(layers.Conv2D(64, (3, 3), activation='relu'))model.add(layers.MaxPooling2D((2, 2)))model.add(layers.Conv2D(128, (3, 3), activation='relu'))model.add(layers.MaxPooling2D((2, 2)))model.add(layers.Conv2D(128, (3, 3), activation='relu'))model.add(layers.MaxPooling2D((2, 2)))model.add(layers.Flatten())model.add(layers.Dense(512, activation='relu'))model.add(layers.Dense(1, activation='sigmoid'))

在阅读一个关于将图像分类为猫或狗的二元分类问题的代码时,我注意到在Dense层中使用了512个单元。他们是如何决定这个数字的?是否有公式可以计算Dense层中的单元数?通常,如果特征很多,我们会选择在Dense层中使用更多的单元数。但在这里,我们如何识别这些特征呢?我知道输出层的Dense层只有一个单元,因为这是个二元分类问题,输出将通过sigmoid函数得到0或1。


回答:

我对CNN的经验是首先建立一个简单的模型并评估其性能。如果你达到了满意的训练和验证准确率,就可以停在这里。如果没有,尝试调整超参数如学习率来获得更好的性能,然后再增加模型的复杂性。我发现使用可调整的学习率有助于提高模型性能。为此,可以使用Keras的回调函数ReduceLROnPlateau。将其设置为监控验证准确率,如果在指定的轮数后没有改善,就降低学习率。文档在这里。这里。还可以使用Keras的回调函数ModelCheckpoint来保存验证损失最低的模型。文档在这里。这里。如果这些方法未能达到所需的训练准确率,那么你可能需要通过增加Dense层中的节点数或添加额外的Dense层来增加模型的复杂性。如果你的模型在训练集上表现良好,但在验证集上表现不佳,那么你的模型可能出现了过拟合。在这种情况下,添加一个dropout层。文档在这里。这里。增加模型复杂性的问题在于它容易导致过拟合。因此,如果你增加了Dense层中的节点数或添加了额外的Dense层,并且验证准确率仍然不佳,你将不得不添加dropout。此外,你可能还需要考虑其他控制过拟合的方法,比如正则化器。文档在这里。这里。对于你的具体例子,我认为你在Dense层中使用的节点数可能比实际需要的要多。可以先尝试使用64个节点。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注