python - 验证准确率达到 90% 后没有提高
问题描述
我有大约 14,000 张图像用于人脸检测二进制分类任务。大约 12,000 张图像用于训练,2,200 张用于验证。我的CNN架构如下-
regularizer = tf.keras.regularizers.l2(l=0.001)
init = tf.initializers.he_uniform()
model = tf.keras.models.Sequential([
tf.keras.layers.Conv2D(filters = 32, kernel_size = (3, 3), strides = (1, 1), padding='same', activation='relu', kernel_initializer=init, kernel_regularizer=regularizer, input_shape=(ht, wd, 3)),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.MaxPooling2D(pool_size=(2, 2), strides=(2, 2)),
tf.keras.layers.Conv2D(64, (5, 5), (1, 1), padding='same', activation='relu', kernel_initializer=init, kernel_regularizer=regularizer),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.MaxPooling2D((2, 2), (2, 2)),
tf.keras.layers.Conv2D(64, (3, 3), (1, 1), padding='same', activation='relu', kernel_initializer=init, kernel_regularizer=regularizer),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.MaxPooling2D((2, 2), (2, 2)),
tf.keras.layers.Conv2D(128, (3, 3), (1, 1), padding='same', activation='relu', kernel_initializer=init, kernel_regularizer=regularizer),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.MaxPooling2D((2, 2), (2, 2)),
tf.keras.layers.Conv2D(128, (3, 3), (1, 1), padding='same', activation='relu', kernel_initializer=init, kernel_regularizer=regularizer),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.MaxPooling2D((2, 2), (2, 2)),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(256, activation = 'relu', kernel_regularizer= regularizer),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.Dropout(0.25),
tf.keras.layers.Dense(1, activation = 'sigmoid')
])
我的输入图像尺寸为 150*180*3。CNN 有大约 900k - 1M 个参数。我正在使用 16/32 的批量大小。另外,我的 Adam 优化器的学习率(初始 lr=0.001)调度器是这样的
reduce_lr_2 = tf.keras.callbacks.ReduceLROnPlateau(monitor='val_loss',
factor=0.2,
patience=2,
verbose=0,
mode='auto',
min_delta=0.0001,
cooldown=1,
min_lr=0)
我应用了多种类型的数据增强。我达到的训练准确率约为 95-96%,我达到的验证准确率约为 90%。我试过改变很多超参数,但验证准确率仍然停留在 90% 左右。有什么方法可以提高验证的准确性吗?
解决方案
有 4 种方法可以提高深度学习性能:
- 利用数据提高性能。
- 使用算法提高性能。
- 通过算法调整提高性能。
- 通过合奏提高性能。
使用数据提高性能:
获取更多数据。发明更多数据。重新调整您的数据。转换您的数据。特征选择
使用算法提高性能
抽查算法:也许您选择的算法不是最适合您的问题。 重采样方法:你必须知道你的模型有多好。您对模型性能的估计是否可靠?
通过算法调整提高性能
一些关于调整神经网络算法以便从中获得更多收益的想法。
诊断。权重初始化。学习率。激活函数。网络拓扑结构。批次和时期。正则化。优化和损失。早停。
通过合奏提高性能
您可能需要考虑的三个一般合奏领域:
组合模型。合并视图。堆叠。
查看以下链接了解更多信息:https ://machinelearningmastery.com/improve-deep-learning-performance/
推荐阅读
- bash - 如何打印多个文件的第一行?
- xml - 为什么在 Node-Express 应用程序中未定义 JSON 对象
- c# - Blazor 客户端(Web 程序集)AuthenticationState 仅在页面重新加载后更新
- java - Firebase 数据库没有显示图片
- javascript - 访问尚未渲染的 React 组件的 props
- php - 从解码 Json 数组中的键获取值?
- python - Gensim 框架:保存和存储 word2vec 键控向量
- mysql - 带有 GROUP_CONCAT 选项的 MYSQL 查询
- c++ - 用户定义类型的 std::format?
- java - 对整数进行升序和降序排序