急!数据挖掘作业。求助bp神经网络,输入值是只含0和1的数,输出值也是只含0和1的数,那么输入层激活函数,输出层激活函数,隐含层激活函数怎么选择呢?孩子试了一下午了,做出来误差太大了。
以下是我想出来的几个思路用于重新考虑你自己的神经网络。
1. 你用了几层神经网络?一层神经网络很可能无法解决异或等线性不可分问题,多层神经网络加上非线性激活函数可以解决这一问题。
2. 你是自己手写神经网络,还是用到了Pytorch等框架?如果是自己手写神经网络,请检查反向传播的梯度计算方法是否有误。
3. 学习速率是否设置的过高或者过低?学习速率过高可能会使得网络一直很快的掠过误差极小值点,导致误差一直较大。学习速率过低,也可能导致很慢才能收敛到合适的结果。一般初始学习速率设置为0.001或者0.0001,如果你的学习速率设置为1,那么很可能学习速率过高了。
4. 你用的哪种激活函数,是否使用的是早期神经网络常用的sigmod函数?如果是sigmod函数,请将他替换为Relu激活函数,因为在实践中被证明,sigmod函数在正数或者负数趋向无穷的时候,会出现梯度消失的情形。
5. 是否使用了优化器来优化反向传播时候的梯度?比较常用的优化器是Adam优化器,他可以适度的调整多个维度上面的反向传播回来的梯度值。建议使用Adam优化器进行优化。
6. 迭代了多少次?如果迭代次数不够的话,可能网络无法收敛。
请按照上述提示检查自己的代码,并及时采纳这条回答。及时的采纳是对付出的肯定~
如果有其余问题,请留言讨论。
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632