为什么我的模型训练减少而验证不减少,训练精度增加而验证准确性不增加?

时间:2020-08-29 08:48:56

标签: python tensorflow machine-learning keras deep-learning

我使用约4600张按70:30比例分割的训练X射线图像。我以为我有一个很好的训练样本集,但是模型出乎意料的错误。下面是描绘模型性能图的图形。

我的CCN如下所示:

INPUT_SHAPE = (224, 224, 3)
inp = tensorflow.keras.layers.Input(shape=INPUT_SHAPE)

conv1 = tensorflow.keras.layers.Conv2D(16, kernel_size=(3, 3), activation='relu', padding='same')(inp)

pool1 = tensorflow.keras.layers.MaxPooling2D(pool_size=(2, 2))(conv1)

norm1 = tensorflow.keras.layers.BatchNormalization()(pool1)

drop1 = tensorflow.keras.layers.Dropout(rate=0.3)(norm1)

conv2 = tensorflow.keras.layers.Conv2D(32, kernel_size=(3, 3), activation='relu', padding='same')(drop1)

pool2 = tensorflow.keras.layers.MaxPooling2D(pool_size=(2, 2))(conv2)

norm2 = tensorflow.keras.layers.BatchNormalization()(pool2)

drop2 = tensorflow.keras.layers.Dropout(rate=0.3)(norm2)

flat = tensorflow.keras.layers.Flatten()(drop2)#平整矩阵以使其准备好密集。

hidden1 = tensorflow.keras.layers.Dense(32,activation='relu',kernel_regularizer=regularizers.l2(0.03))

norm4 = tensorflow.keras.layers.BatchNormalization()(hidden1)

drop4 = tensorflow.keras.layers.Dropout(rate=0.5)(norm4)

out = tensorflow.keras.layers.Dense(2, activation='softmax')(drop4)#units = 1出错

model_1 = tensorflow.keras.Model(inputs=inp, outputs=out)

model_1.summary()

如果我在这里缺少任何东西,请提供帮助。我正在对X射线图像进行分类。

enter image description here

enter image description here

3 个答案:

答案 0 :(得分:2)

您的模型过拟合。通常,当您的数据集采样不充分或模型对于数据集过于复杂时,就会发生这种情况。正确采样数据集并训练模型不超过20个纪元。另外,我们可以将您的图片标准化为x / 255.0,并省略BatchNormalization图层。

答案 1 :(得分:0)

您的验证集似乎采样不正确。尝试先对数据集进行改组,然后将其拆分为训练,验证和测试集。

答案 2 :(得分:0)

高培训准确性与低验证准确性一起表明您过度拟合了培训数据。我建议使用Residual Network,这是非平凡的图像处理深度学习任务的标准。