赞
踩
一开始实现了vgg网络使用Adam优化器设置的学习率0.1,测试的loss毫无变化,原因是学习率learning rate太搞了后来设置成0.005,并且使用xavier_normal初始化卷积层和全连接层的参数,loss才开始慢慢下降,但是精度达到0.71就开始overfitting了。
def initial(layer):
if isinstance(layer, nn.Linear) or isinstance(layer, nn.Conv2d):
nn.init.xavier_normal_(layer.weight.data)
之后改变优化器使用SGD
optimizer = torch.optim.SGD(net.parameters(), lr=lr,
momentum=0.9, weight_decay=0.0005)
同时在这里采用学习率下降的策略,全部训练数据集大概每迭代5轮就进行一次学习的衰退。
这里迭代了26轮就结束,训练的loss,测试的loss和测试精度如下图所示。
可以看到在第8个epoch, 测试loss开始上升,但是训练loss还在不断下降,大概率是过拟合,但是奇怪的测试精度在不断的上升。这里可以看见每次学习率下降时,测试精度会有小幅度提升,调小学习率可以改善过拟合,可以看见在25轮后学习下降了,26轮后的测试精度又开始小幅度上升,大概可以上升到0.77。
所以在我试着把学习率下降频率调高,每隔2个epoch就下降0.1,并且vggnent的全连接层通道太大、参数过多,非常容易过拟合,这里我们把全连接层后的dropout参数改为0.4。结果不太好,大概原因是vgg的全连接层太大了,非常容易过拟合,接下来使用resnet看看。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。