我大约有14,000张图像用于面部检测二进制分类任务。大约有12,000张图像用于训练,有2200张图像用于验证。我的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%左右。有什么方法可以提高验证准确性吗?
答案 0 :(得分:1)
有四种方法可以改善深度学习性能:
通过数据提高性能:
获取更多数据。 发明更多数据。 重新缩放您的数据。 转换您的数据。 功能选择
通过算法提高性能
抽查算法:也许您选择的算法并非最适合您的问题。 重采样方法:您必须知道模型的质量。您对模型性能的估计可靠吗?
通过算法调整提高性能
关于调整神经网络算法以从中受益的一些想法。
诊断。 重量初始化。 学习率。 激活功能。 网络拓扑结构。 批次和时代。 正则化。 优化和损失。 尽早停止。
通过合奏改善演奏
您可能要考虑的三个总体乐团领域:
组合模型。 合并视图。 堆积。
检查以下链接以获取更多信息:https://machinelearningmastery.com/improve-deep-learning-performance/