tkinter+tensorflow,利用神经网络拟合函数可视化小程序
写这个小程序的目的有2个:
1. 向同事证明神经网络可以拟合函数;
2. 可视化地感受不同参数对拟合过程的影响。
下图是用tkinter做的GUI界面,请忽略丑陋的布局。
1. 网络结构:
理论认为:当隐藏层节点数足够多时,只需三层BP网络即可逼近任何连续函数。
程序中网络结构十分简单:1输入,1输出,中间隐藏层的节点数默认为10,为可调参数,目标函数为二次函数,数据点加了噪音。
2. 当数据过少时,容易出现过拟合:
当数据点的个数只有4个时,为了使得loss最小,神经网络经过了这四个点,学习结果为3个分段函数,与目标值二次函数存在较大出入,出现了明显的过拟合。
3. 学习率太大时,模型可能无法收敛:
4. 模型并不是越大越好:
当神经网络隐藏层节点数由5变为50时,直观上看:拟合结果差别并不大。
这里其实就涉及到一个问题:精度和速度之间的平衡。
未来还可以可视化的观察:
a. 不同优化器,如Adam,rmsprop,SGD的差别;
b. 异常值的加入对结果的影响;
……