赞
踩
欢迎关注我的公众号:YueTan
最近在使用pytorch训练模型时,发现无法收敛。模型无法学到任何有效知识。经过几天的debug,能够解决无法学习和无法收敛的问题,但还是没有从根本上理解原因,因此通过本文进行一个记录。
若干天实验之后才发现如下问题:
nn.CrossEntropyLoss(reduction="mean")
- 标签采用label encoder形式
nn.BCEWithLogitsLoss()
- 标签采用one hot形式
虽然对pytorch不熟,但确实很谜,不知道为啥换Cross entropy就没问题
回想到数据本身的特点,由于不平衡,可能导致训练集中有些类别都压根没有。是否会导致奇怪现象呢。也就是二分类如果真实标签全都是0,
当把类别中数量少的样本都增加到训练集中,而不是测试集时,可以发现使用BCE也基本可以达到相对好的效果,虽然目前只有68,但已经可以学习到一些东西了。也就是说使用BCE很可能需要训练更多的epochs。
CrossEntropy必须用long的形式,BCE则不一定。非常有可能是因为使用了torch的单精度训练导致的
APEX=False
Apex=True
另外一种现象,
注释掉一下代码时,可以运行了
y_true = y_true.long()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。