小问题汇总
1、网络训练前为什么需要热身?
- 主要为了解决初始学习率过大导致训练不稳定问题
2、验证时为什么Batch Size要设置成1?
- 不同尺寸的图片打成同一个batch送到网络之前必然要resize(比如padding)成同一个尺寸,为了避免resize带来的干预,所以让一个batch只有一个图片是最好的(前提是你是用的数据尺寸不同,如果相同的话,当然大点好,跑满)
3、为啥我保存的权重文件那么大?
- 自己保存的包括,模型权重,优化器信息,学习率策略相关信息,当前迭代的epoch信息,如果使用混合精度的信息
- 预训练权重只包含,模型权重的信息
4、准确率Accuracy与损失函数Loss的关系?
损失函数:交叉熵损失,只关心对正确类别的预测概率
准确率:取概率最大的索引所对应的标签做为最终预测的结果标签
因为准确率是输出最大的概率,因此0.9的概率值和0.5的概率值效果是等价的,只要保证他们是最大概率即可!
- 有一个样本预测输出是[0.1, 0.9], 它的交叉熵损失为loss = -1* log(0.9) = 0.046, 预测结果为:狗
- 另一个样本的预测输出是[0.4, 0.6], 它的交叉熵损失为loss = -1 * log(0.6) = 0.222, 预测结果为:狗
可以看出两个样本都预测的为狗,但是他们的交叉熵损失差别很大。因此我们在训练时,可能会出现准确率和交叉熵同时上升的情况。
总结
- 如果正确标签的概率降低,但这个标签依然是概率最高的,会出现损失增加单准确度不变的结果。
- 如果数据集的标签很不平均,比如90%是类别A,那么模型一味增加预测A的比例,可能会让准确度上升,但loss可能也会以更大幅度上升(cross
entropy的幅度可以很大) - 如果模型非常自信,大多数正确标签的概率都接近1,那如果出现一个错误,准确率可能只会降低很少,但交叉熵可能会非常高。