训练神经网络遇到过的坑

1. 训练数据不准确(2019/12/10)

最开始接触神经网络训练的时候,生成好自己的训练数据后,便直接套用不同的神经网络进行训练,从最简单的Lenet开始,然后发现性能并不好,在调整各种超参数后性能还是不行,因此又进一步试了Alexnet网络,结果跑了一遍后,测试了一个例子,结果发现预测向量回归的不错,以为搞定了。

然后又测试各种不同的例子,包括弱湍流和强湍流,结果发现在强湍流的情况下性能始终很差,而在弱湍流下却不错,也是在调整各种超参数后性能还是不行,然后在这卡了非常久,想过很多方法,包括对输出向量做缩放等等。最后,在室友的提醒下,把输入的光强图片都打印出来看下,结果发现在强湍流下的光斑图像有一部分都溢出去了,也就是说有很多的光强信息丢失了,而弱湍流由于畸变没那么严重,所以没有这种现象,因此这也就解释了前面弱湍流下性能好于强湍流的情况。在了解原因后,重新调整光强,最后在弱湍流和强湍流下都有较好的性能,解决了问题。

总结:训练神经网络最重要的一步就是保证训练数据的准确性,训练数据有问题,后面都是徒劳的。

2. 加载预训练模型(2019/12/15)

在自己的数据集上训练VGG模型时,遇到loss一直不下降的问题,首先保证了自己的数据集是没有问题的(在其他网络下可以),然后尝试了各种调参,包括改变Loss函数、调整优化算法学习率、权重初始化方法、调整网络、batch size、输入图片大小及维度等等,但各种尝试后发现还是存在一样的问题。

最后是在室友的提醒下,用VGG网络最好得加载预训练模型,因为VGG网络需要大量的数据训练的。因此,考虑加载预训练模型,因此将我的输入128*128*1改成224*224*1(resize+三通道重复),最后一层全连接不用预训练模型中的权重,加载好预训练模型后,网络立马就可以工作了。

总结:在训练较深层的网络时,最好需要加载预训练模型,不然网络很难训。

3. 添加过多的层后训练误差往往不降反升(2019/12/18)

参考:https://tangshusen.me/Dive-into-DL-PyTorch/#/chapter05_CNN/5.11_resnet

直观上网络层数加深似乎更容易降低训练误差。然而在实践中,添加过多的层后训练误差往往不降反升。即使利用批量归一化带来的数值稳定性使训练深层模型更加容易,该问题仍然存在。针对这一问题,何恺明等人提出了残差网络(ResNet)。它在2015年的ImageNet图像识别挑战赛夺魁,并深刻影响了后来的深度神经网络的设计。

总结:并不是网络加深,训练Loss一定就会下降。

猜你喜欢

转载自blog.csdn.net/wuzhuoxi7116/article/details/103476861