最近在对10750个汉字做分类,使用resnet50为基本框架,分类部分多加了一个线性层,每个汉字作为1类。损失函数是交叉熵函数。
类别太多的话,网络一开始不易学习到。使用sgd的话好像根本没法学习。
我使用Adadelta (lr=0.01) 从头开始训练,虽然结果可以达到92%,但是查看网络输出的得分发现值相当异常,全部都是小于-30,000。这也导致了最后的分类层的梯度值相当大,最终导致训练不好(没法把loss降到很低)。
目前是先用Adadelta从头训练,可以选择当loss降到5一下时,换用Adam (lr=1e-3),这样网络输出的分数值就会变得正常了,而且loss下降得很好。
最后也可以用SGD微调参数。
有空一定要好好研究一下这些优化器的原理。