【发布时间】:2020-01-26 21:35:16
【问题描述】:
我有大约 8200 张图像用于人脸检测任务。其中 4800 个包含人脸。其他 3400 张图像包含 3D 人脸面具(由橡胶/乳胶制成)、卡通人脸、猴子脸的图像。我想检测给定的图像是否包含真实的人脸。
我已经训练了许多网络,改变了超参数,但每次我的训练准确率都高达 98% 以上,验证准确率保持在 60-70% 左右。我已经尝试过包含 3-5 个 Conv 层和一个 FC 层的网络。我使用 L2 正则化、批量规范、数据增强和 dropout 来消除过拟合。然后我尝试随着训练的进行降低 Adam 优化器的学习率。我对网络进行了超过 100 个 epoch 的训练,有时甚至高达 200 个 epoch。然而,我能达到的最佳验证准确率(数据集的 20%)是 71%。有没有办法将验证准确率提高到 85% 以上? 我使用以下架构,输入图像大小为 256*256*3,并以 16 的批量大小训练它们。
regularizer = tf.keras.regularizers.l2(l=0.005)
model = tf.keras.models.Sequential([
tf.keras.layers.Conv2D(64, (5, 5),strides=(2, 2), activation='relu', input_shape=(256, 256, 3), kernel_regularizer=regularizer),
tf.keras.layers.MaxPooling2D(2, 2),
tf.keras.layers.Conv2D(96, (5, 5), padding='same', activation='relu', kernel_regularizer=None),
tf.keras.layers.MaxPooling2D(2, 2),
tf.keras.layers.Conv2D(128, (3, 3), padding='same', activation='relu', kernel_regularizer=None),
tf.keras.layers.MaxPooling2D(2, 2),
tf.keras.layers.Conv2D(256, (3, 3), padding='same', activation='relu', kernel_regularizer=None),
tf.keras.layers.MaxPooling2D(2, 2),
tf.keras.layers.Flatten(),
#tf.keras.layers.Dense(2048, activation='relu', kernel_regularizer=regularizer),
tf.keras.layers.Dense(4096, activation='relu', kernel_regularizer=None),
tf.keras.layers.Dropout(0.4),
tf.keras.layers.Dense(1, activation='sigmoid', kernel_regularizer=regularizer)
])
【问题讨论】:
-
您可能只是没有足够大的数据集。 8200 张图像不是很多,如果你没有足够的图像来学习你的任务的一般表示,你就会过拟合。尝试在您的图像上使用转换来增加您的有效样本数量。
-
我尝试了旋转、水平翻转和改变亮度等增强功能。这没有多大帮助。
标签: python tensorflow machine-learning keras deep-learning