【发布时间】:2019-10-18 18:00:54
【问题描述】:
我有大约 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 优化器的学习率(initial 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% 左右。有什么方法可以提高验证的准确性吗?
【问题讨论】:
-
你的损失图是什么样的?验证数据集和训练数据集是否形成相同的分布?它们的尺寸是多少?模型是否过拟合?
-
是的,它们来自同一个发行版。尺寸已经提到过。我不认为模型过度拟合。在达到 90% Val acc 后,val loss 似乎是恒定的,并且在一些 epoch 之后,val loss 略有增加并波动。
-
你有损失图吗
-
val 损失在达到 90% Val acc 后似乎是恒定的,并且在一些 epoch 之后,val 损失略有增加并波动。
-
一旦您的验证损失开始增加并偏离训练损失,您就已经开始过度拟合。
标签: python deep-learning conv-neural-network tf.keras