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

标签 python tensorflow deep-learning classification multilabel-classification

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

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

我是深度学习的新手,如果有人有任何改进建议,请告诉我。

最佳答案

val_loss 不断增加而 Val_acc 不断增加 这可能是因为损失函数......损失函数是使用实际预测概率计算的,而准确度是使用一个热向量计算的。 p>

让我们以您的 4 类为例。对于其中一个评论 true 类是,说 1。系统预测的概率为 [0.25, 0.30, 0.25, 0.2]。根据 categorical_accuracy 您的输出是正确的,即 [0, 1, 0, 0] 但由于您的概率质量分布如此...categorical_crossentropy 也会产生高损失.

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

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

关于python - 验证损失在 3 个时期后增加,但验证准确性不断增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55320567/

相关文章:

python - tensorflow "op"有什么作用?

python - caffe 安装找不到 python 3.5,即使它已安装并在路径变量中标记

c - 如何使用 C/C++ 对经过训练的神经网络进行推理?

python - 模块未找到错误: No module named 'ruamel'

python - 使用 gridspec 移动颜色条

python - PyMC 中的装饰器

python - 使用keras的L2标准化输出

python-3.x - 在使用 train_on_batch() 训练的 Keras 中重新训练保存的模型

python - Tastypie - 嵌套资源被更新而不是在 POST 上创建

tensorflow - 将张量的所有负值设置为零(在 tensorflow 中)