test_loss比train_loss小的原因

img

网络训练过程,模型的test_loss小于train_loss,并且逐渐趋于稳定,这正常么?我看其他人论文里,train_loss都是小于test_loss的,难道是我网络或者数据有问题?
我有14万组理论数据。采用8:2的数据集划分方式。

博主参考一下下面链接

一个值得深思的问题?为什么验证集的loss会小于训练集的loss_flyfor2013的博客-CSDN博客_测试集loss比训练集loss小 在本教程中,您将学习在训练自己的自定义深度神经网络时,验证损失可能低于训练损失的三个主要原因。我的验证损失低于训练损失!怎么可能呢?我是否意外地将训练和验证loss绘图的标签切换了? 潜在地。 我没有像matplotlib这样的绘图库,因此将丢失日志通过管道传输到CSV文件,然后在Excel中进行绘图。 绝对容易发生人为错误。我的代码中有错误吗? 几乎可以确定。 我同时在自学J... https://blog.csdn.net/flyfor2013/article/details/102889000?ops_request_misc=&request_id=&biz_id=102&utm_term=test_loss%E6%AF%94train_loss%E5%B0%8F%E7%9A%84%E5%8E%9F%E5%9B%A0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~sobaiduweb~default-1-102889000.nonecase&spm=1018.2226.3001.4450

不正常
一般情况下因为网络地不稳定性,存在一定程度上的过拟合,所以肯定是train_loss低于test_lost,但如果低太多,就得考虑是过拟合的问题还是因为样本的特征空间不统一的问题。
一般训练集不大时,最终训练的网络及容易过拟合,也就是说train-loss一定会收敛,但是test-loss不会收敛;  训练时的loss会低于test的loss大概1~2个数量级,通常是10倍左右。

你结合这个博文中介绍的分析思路和解决办法,就可以有效快速的判断。链接:https://blog.csdn.net/weixin_39650149/article/details/118540831

LSTM是用来做文本生成,做垃圾邮件识别似乎没有什么道理。
你的loss用的可能是MSE,平方误差对于大的误差的减小比较敏感,但是对于最终的分类没有什么帮助,就导致acc没有什么变化loss一直下降
另外就是要看两者的数量级的差别,比如loss的确是下降,比如从0.234 0.233 .0232 0.231 ... 0.2195 0.2194 ... 但是实际上下降了很多轮,下降的相对比率并不多。相反,acc是一个绝对的数,看上去就似乎一直一样。

这个看看
https://blog.csdn.net/qq_24502469/article/details/105119449

不知道你啥子网络,先按神经网络来分析,具体有些网络可能还有一些细微的差距。
先确定你的数据分布情况,是否真的随机分布还是有部分数据泄漏问题,从你上面的描述来看,划分验证集和训练集的时候是正常的,那么此时的测试集loss和训练集loss是什么情况呢?一般来说,训练的时候数据集划分一定需要有的是val和train,test反而可以是没有的,测试集只是评估最终的训练结果用的,不会在训练阶段使用。你如果划分为train和test,那么你的test应该就得当做val去训练才有上面的图片,你当做验证集去训练了吗还是就只当测试集?
如果上面你的确是将test当做val去训练的话,就得检查一下数据泄漏的问题,看下val(你的test得当做val训练)是不是train的子集。
如果你确定你的数据集没有问题,那么将网络层的droupout值改小点看下,设置太大会导致train-loss偏大,但是结果是好的。

img


最后一点,你这里loss上下波动,不考虑后期训练降低学习率吗?