keras - 查找微调模型的顶层
问题描述
我想使用基于 MobileNetV2(在 Keras 上预训练)的微调模型。但我需要添加顶层以便将我的图像分为 2 个类。我想知道如何选择我需要的层的“架构”?在一些示例中,人们使用 SVM 分类器或一系列具有特定数量神经元的 Dense 层作为顶层。
以下代码(默认情况下),它的工作原理:
self.base_model = base_model
x = self.base_model.output
x = GlobalAveragePooling2D()(x)
x = Dense(1024, activation='relu')(x)
predictions = Dense(2, activation='softmax')(x)
有什么方法可以找到最佳解决方案吗?
解决方案
我会推荐Dropout
或BatchNormalization
。Dense 很容易过拟合,因为它在一个层中有太多的参数。两层都可以很好地规范模型。GlobalAveragePooling2D
是一个不错的选择,因为它本身也像正则化器。
我还建议,对于二元分类问题,您可以将输出层更改为Dense(1, activation='sigmoid')
仅预测 P(class1),您可以通过 1-P(class1) 计算 P(class2)。在这种情况下,您应该使用的损失将binary_crossentropy
代替categorical_crossentropy
.
推荐阅读
- database - 艾泽拉斯核心 - 看不到表 areatable_dbc 中的数据
- scala - 简化 Scala 中的 Option[Boolean] 表达式
- node.js - Sequelize - 根据标题中的术语过滤帖子?
- dart - Dart List 包含用法
- opengl - 如何解释 GL_DEBUG_OUTPUT 消息?
- python - 如何计算两列之间的距离并将它们绘制成熊猫
- javascript - 如何制作用于从数组数组中形成查询字符串的算法
- .net-core - 从 .Net Core 应用程序中读取锁定的 Azure DevOps 变量
- amazon-web-services - 如何在日志洞察查询中获取整个期间的 AWS 云观察日志数据
- firebase - 新的 Firebase 自定义事件跟踪不会捕获任何数据