利用BP神经网络逼近sin函数

利用神经网络逼近sin函数

代码被改得面目全非就不贴了,思路很简单,(1,5,1)的网络,从-pi到pi取1000个点,单个往网络里扔,误差值直接用预测与真实值差值决定,保留正负号,正常求导,速率0.003,1000个点迭代500次,训练完拿500个等间距点计算误差值平方和有0.5多,5000次有0.35,不过5000次迭代要十几个小时。

下图蓝色是真实值,红色是预测值,是500次的结果,很明显的在值接近于1的地方拟合很差,整体预测比真是值扁,不知道是不是用了tanh的问题,希望以后能解决吧

利用BP神经网络逼近sin函数_第1张图片

不知道过了多少天,突然醒悟了极值不能逼近的原因是tanh=1时斜率会消失导致反向传播基本没用,又过了一天想着取个巧既然tanh=1没斜率那能不能不逼近sin了逼近0.5sin行不行,这样tanh=0.5时斜率还很大,于是完全没有迁移上次学习结果的情况下把结构减少到(1,5,1)且只迭代2000次,结果给我看哭了,600个点取欧式距离只有0.12多,而且又迭代了几次这个值还能继续变小利用BP神经网络逼近sin函数_第2张图片

又加跑了2000次,500个采样点取欧式距离和只有0.003,而且看样子还能继续变小,不过到这就够了
利用BP神经网络逼近sin函数_第3张图片


这个先告一段落,下次试试更难的图像风格迁移吧

你可能感兴趣的:(利用BP神经网络逼近sin函数)