训练结果如下所示:
终端第1列:epochs,第2列:训练损失(蓝色曲线),第3列:测试损失(橙色曲线)
batch size:16,lr:4e-5
1. 是否找到合适的loss函数
2. batch size是否合适:过大的batchsize会让网络收敛到不好的局部最优点,泛化性不好;过小的batchsize训练速度慢,训练不收敛。
3. 是否使用合适的activation function
4. 学习率:学习率太大,一步前进的路程太长,会出现来回震荡的情况,但是学习率太小,收敛速度会比较慢。
综上,图中损失曲线均收敛至20000左右,没有出现回荡现象,因此学习率不优先修改。收敛值过高,怀疑可能是局部最优了,所以优先调节batch size。
调整后重新训练结果如下:batch size=8,其他不变。
由上述结果可以看出,调小batch size之后,收敛后的损失值有明显下降。
但是后续发现,我这边的代码真的不太好,效果很差,所以要考虑一下是不是损失函数太简单了,方法论不太好!