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/