一开始我是这样写early-stopping
:
if pre_batch_loss <= val_loss:
break
else:
pre_batch_loss = val_loss
训练的时候,有很多epoch内,batch的loss都是先降低又升高,但mean_val_loss却一直下降,所以它能一直训练。但测试时,只预测一种类别。
这样改了以后,预测就好多了:
if pre_batch_loss <= val_loss:
ner_model.load_state_dict(torch.load('batch_middle_state_dict.pth'))
break
else:
torch.save(ner_model.state_dict(), 'batch_middle_state_dict.pth')
pre_batch_loss = val_loss
还有,不写上述的early-stopping也只预测一个类,甚至loss比写了的还小,但还是只预测一个类。