训练初始阶段训练损失远低于验证损失的原因是什么?
二分类深度学习模型训练问题说明
训练损失异常现象
训练损失初始值极低,仅为0.0181,而验证损失初始值为2.4625,二者差距超过150倍。随着模型学习并拟合可泛化特征,验证损失确实有所下降,但始终无法达到训练损失的水平,且训练损失会随着训练epoch数增加变得极小。
模型与数据集基础信息
- 任务类型:二分类
- 总样本量(训练集+验证集):约3.1万条
- 数据集分布:类别极不均衡,正样本标签占比5%,负样本标签占比95%
- 模型结构:输入先经过Conv1D层,再传入Bidirectional GRU单元,最后输出到两个全连接层
- 参数量详情:
- 总参数量:294,737
- 可训练参数量:294,417
- 不可训练参数量:320
训练相关配置与日志
初始训练输出日志
Training model.... (31639, 121, 4) Epoch 1/100 learning rate: 0.01 15/15 [==============================] - 6s 190ms/step - loss: 0.0181 - accuracy: 0.0926 - val_loss: 2.4625 - val_accuracy: 0.0506 Epoch 2/100 learning rate: 0.01 15/15 [==============================] - 2s 148ms/step - loss: 0.0104 - accuracy: 0.0478 - val_loss: 2.1587 - val_accuracy: 0.0506 .....
训练配置与代码
共计训练100个epoch,训练过程中多次调整callback参数,损失函数采用二元交叉熵(binary cross-entropy)。
模型编译代码如下:
model = Model(inputs=[f_input, rc_input], outputs=predict) adam=Adam(lr=hyperparam_dict['initial_lr'],beta_1=0.9, beta_2=0.999, epsilon=1e-08) model.compile(loss='binary_crossentropy', optimizer=adam, metrics=['accuracy'])
内容的提问来源于stack exchange,提问作者Hang Yin
相关产品推荐
相关产品推荐

