使用只含有全连接层的神经网络loss值可以降低到0.2,但使用卷积神经网络就训练得到的loss值就一直是0.9,1,甚至为2.
本人尝试了添加权重初始化、修改学习速率、以及选择其他优化器,都未见成效,请大家指点一二。
你的数据加载器呢?数据预处理的时候有没有进行归一化处理?
提供参考实例:https://blog.ailemon.net/2019/02/26/solution-to-loss-doesnt-drop-in-nn-train/
【如何解决神经网络训练时loss不下降的问题】
模型结构太复杂,神经网络不是越复杂越好,建议把4个全连接层换成2个全连接层,优化器换成Adam。
训练样本有多少,训练样本少的话损失值就高
试试调节学习率和优化器,同时也要注意矩阵相乘的顺序有没有弄反了。
在神经网络的训练过程中,正常情况下整体的过程是一个Loss不断下降的过程,然而在训练过程中往往存在一些batch_size输入时,前向传播得到的Loss突然变大的情景。
在训练神经网络过程中,经过softmax函数输出概率后,当当前最大概率对应的类别与训练标签一致时,损失Loss往往较小,而经过softmax输出时,训练标签所对应的概率softmax概率较小,此时的Loss计算结果往往很大。对此引出两个解决问题的思路:
1.可能是训练标签未进行很好的标注,假设当前是一个二分类问题,我们需要提前定义的标签类别为0,1。假设一个标签被错误的定义为2,导致此batch输入无论怎么训练得到的结果都是错误的分类,导致Loss过大情形,此时需要我们可以通过重新制作训练标签来解决。
2.可以通过设定一些条件来对Loss进行约束,在训练过程中如果出现Loss增大程度超出了一定的阈值,可以将此时的Loss强制设为0,这样在反向传播时就不会对权重和bias系数的迭代更新做贡献。
卷积神经网络进行学习曲线应该是下降,并且精度不能匹配过高
1.先看一下输入图像是否有噪声,噪声会影响网络的计算结果;
2.如果没有噪声,看一下每个卷积层的参数设置,注意权值和阈值的调整;
3.可以试着用降低中心点和增加边缘的方法来改善;
4.最后,如果上述两种方法都不行,可能是卷积层有问题。
一、在预处理过程中尽量减少噪声,这里主要包括图片和视频。二、在卷积层中使用动态范围较小的权重,如高斯分布的权重。三、尽量使用低的平均值和高的方差。四、使用大的激活函数,并且避免使用小的激活函数。五、将输出的目标区域划分成多个区域。六、使用全连接层,尽量减少反向传播过程中的损失。七、使用强大的前馈层。八、减少光照和噪声。九、减少对数据集的过度拟合。十、使用快速变换的方式进行卷积操作。
只含有全连接层的神经网络loss值可以降低到0.2,但使用卷积神经网络就训练得到的loss值就一直是0.9。
从描述上看,很明显是你的数据不适合卷积神经网络,看了一下你的代码,包含了pool,删掉这个pool层应该会好一些。你应该在你原先的fc网络的最前面逐步增加conv或pool层,当效果下降后停止增加