踩过的坑

1. loss不变,learn nothing

我的模型没有学到任何东西,不是我的模型太垃圾,而是我太垃圾了,在数据预处理阶段没有仔细检查,导致我的输入的embedding全为零。

Input nothing,learn nothing。 ——春天

2. loss 变成nan, embedding 也是nan

其实这个问题上一个问题差不多。不是大家常见的梯度爆炸的问题,也不是模型的问题,还是数据的问题。
有一个数据的embedding全为0,这比上一个问题中所有输入embedding都是0更为隐蔽。每当模型碰到这个全为0的输入时,embedding 和 loss就突然都变成nan了。

再进一步,为什么会有一个数据的embedding都是0呢。原因在于我的输入数据是从句子中匹配实体词作为输入,首先匹配到的实体词可能为空,其次,实体词可能oov,而unknown的embedding被设置为零向量。

3. ner任务,预测标签全部为0

也就是没有识别出任何一个实体,模型给所有的词都搭上了“O”的标签。
原因可能是输入的embedding矩阵太过稀疏。正在寻找原因。

–2021.1.13更新
做分类任务时候也出现了一次这样的情况,所有预测结果都归到了数目最多的类别。检查了下代码,是因为多加了一层softmax,用的是tf.nn.softmax_cross_entropy_with_logits_v2计算loss,但是在计算loss之前,我在输出上套了一层tf.nn.softmax()。把这层去掉就正常了。
怀疑上次ner任务也是loss部分有问题。

4. 在划分数据集的时候,确保每个类别在每个set里都有

尤其是在类别不均衡的数据集上,无论是划分训练集和测试集,还是手动划分n折数据集,要核验每个类别的数据在每个set种都存在。

5. Warning

UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use zero_division parameter to control this behavior.

这个警告的出现,是因为预测标签里没有出现所有的真实标签。如果你有100类标签,但是预测里只出现99类标签,就会出现这个警告。
比如真实标签[0, 1, 1, 0],但是预测标签是[0, 0, 0, 0]。

另一个类似的警告是下面这个:

UndefinedMetricWarning: Recall and F-score are ill-defined and being set to 0.0 in labels with no true samples.

这个是说模型预测了一个标签,但是在真实标签列表里,这个标签不存在。
比如真实标签[0, 1, 1, 0],但是预测标签是[0, 1, 2, 0]。
这个问题就有可能是由【坑4】引起的,划分数据集时,训练集中少了某类标签,但是出现在了测试集里。

在 stack overflow上有个类似的问题【link】,由于我过了不真人验证无法回答,但是答案不能白写,所以贴在下面啦。
Hi, I encoutnered the same problem as yours.

I found it was caused by the rough division of training set and testing set.
This waring means some labels are in predicted squence but it can not be found in the true labels squence. such as the true labels are [0, 0, 1, 0] while the predicted labels are [0, 0, 1, 2].

So, you should re-split the dataset to ensure every kind of lable is included in the training set and testing set, that is the num of labels of training and tesing are equal.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值