CNN过度拟合

时间:2018-04-14 12:26:31

标签: tensorflow neural-network keras

我有一个暹罗CNN在训练数据上的表现非常好(准确率为96%,损失为0.08)但在测试数据上表现不佳(70%准确率,0.1%损失)。

架构如下:

input_main = Input(shape=input_shape, dtype='float32')
x = Conv2D(32, (3, 3), padding='same', activation='relu',
            kernel_regularizer=l2(0.005))(input_main)
x = Conv2D(16, (5, 5), activation='relu',
            kernel_regularizer=l2(0.005))(x)
x = MaxPooling2D(pool_size=(5, 5))(x)
x = Dropout(0.5)(x)

x = Conv2D(32, (3, 3), padding='same', activation='relu',
            kernel_regularizer=l2(0.0005))(x)
x = Conv2D(32, (7, 7), activation='relu',
            kernel_regularizer=l2(0.005))(x)
x = MaxPooling2D(pool_size=(3, 3))(x)
x = Dropout(0.5)(x)

x = Flatten()(x)
#x = Dropout(0.5)(x)
x = Dense(16, activation='relu',
            kernel_regularizer=l2(0.005))(x)

model = Model(inputs=input_main, outputs=x)

然后将其中两个组合成一个连体结构,最后一层的矢量之间的差异通知结果。我已经尝试了辍学和正规化,但都没能解决问题(这些参数是我在发布时测试的那些参数)

我还尝试将架构简化为更少的转换层,但这并没有解决问题。

数据是256x128x1图像,通过网络与二进制标签成对发送,具体取决于它们是否相同。我还使用数据增强,一些小的旋转和翻译。

有人可以提出任何其他建议来解决这个过度拟合的问题吗?

0 个答案:

没有答案