验证损失在3个时期后增加,但验证准确性不断提高

问题描述 投票:2回答:1

培训和验证在2个时期是健康的,但在2-3个时期之后,Val_loss不断增加,而Val_acc不断增加。

我正在尝试训练CNN模型,将给定的评论分类为1-5级。因此,我认为它是一个多类别的分类。我将数据集分为3组--70%的培训,20%的测试和10%的验证。

5个班级的培训数据分布如下。

1 - 31613, 2 - 32527, 3 - 61044, 4 - 140005, 5 - 173023.

因此我添加了类权重如下。

{1: 5.47, 2: 5.32, 3: 2.83, 4: 1.26, 5: 1}

模型结构如下。

input_layer = Input(shape=(max_length, ), dtype='int32')

embedding = Embedding(vocab_size, 200, input_length=max_length)(input_layer)

channel1 = Conv1D(filters=100, kernel_size=2, padding='valid', activation='relu', strides=1)(embedding)
channel1 = GlobalMaxPooling1D()(channel1)

channel2 = Conv1D(filters=100, kernel_size=3, padding='valid', activation='relu', strides=1)(embedding)
channel2 = GlobalMaxPooling1D()(channel2)

channel3 = Conv1D(filters=100, kernel_size=4, padding='valid', activation='relu', strides=1)(embedding)
channel3 = GlobalMaxPooling1D()(channel3)

merged = concatenate([channel1, channel2, channel3], axis=1)

merged = Dense(256, activation='relu')(merged)
merged = Dropout(0.6)(merged)
merged = Dense(5)(merged)
output = Activation('softmax')(merged)
model = Model(inputs=[input_layer], outputs=[output])

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['categorical_accuracy'])

model.fit(final_X_train, final_Y_train, epochs=5, batch_size=512, validation_data=(final_X_val, final_Y_val), callbacks=callback, class_weight=class_weights)

1/5 - 损失:1.8733 - categorical_accuracy:0.5892 - val_loss:0.7749 - val_categorical_accuracy:0.6558

2/5 - 损失:1.3908 - categorical_accuracy:0.6917 - val_loss:0.7421 - val_categorical_accuracy:0.6784

3/5 - 损失:0.9587 - categorical_accuracy:0.7734 - val_loss:0.7595 - val_categorical_accuracy:0.6947

4/5 - 损失:0.6402 - categorical_accuracy:0.8370 - val_loss:0.7921 - val_categorical_accuracy:0.7216

5/5 - 损失:0.4520 - categorical_accuracy:0.8814 - val_loss:0.8556 - val_categorical_accuracy:0.7331

最终准确度= 0.7328754744261703

这似乎是一个过度拟合的行为,但我已经尝试添加没有帮助的辍学图层。我也尝试增加数据,这使得结果更糟糕。

我对深度学习完全不熟悉,如果有人有任何改进建议,请告诉我。

python tensorflow deep-learning classification multilabel-classification
1个回答
1
投票

val_loss保持增加而Val_acc保持增加这可能是因为损失函数...使用实际预测概率计算损失函数,同时使用一个热矢量计算精度。

让我们来看看你的4级示例吧。对于其中一个评论,真正的类是,例如1.系统的预测概率是[0.25,0.30,0.25,0.2]。根据categorical_accuracy,你的输出是正确的,即[0,1,0,0]但是因为你的概率质量是如此分散的......categical_crossentropy也会给出高损失。

至于过度拟合的问题。我不确定为什么引入更多数据会导致问题。

尝试增加步伐。不要通过向任何特定类添加数据来使数据更加不平衡。

© www.soinside.com 2019 - 2024. All rights reserved.