首页
学习
活动
专区
工具
TVP
发布

神经网络拟合二次函数

上一篇文章,《神经网络训练一次函数》属于入门级的基础,是比较简单的。它相当于只用了一个神经元,用单个的神经元来进行误差反馈调节,且没有激励函数。那么构建多层的包含多个神经元的网络,应该怎么做呢?

下午,我们利用一元二次函数随机生成训练数据,然后构建单层(包含多个神经元)神经网络对输入的数据进行拟合。

代码如下:

Tensorflow的理念是一种计算流图,我们很多的工作都是在构建系统的graph,代码并没有生效,只有当启动Session后,系统才会运行起来。

我们用tf.placeholder设置形参,类似声明变量,先定义好形参的类型和属性。后面建立session执行的时候再利用feed_dict字典传入对应的实参,由TensorFlow通过计算流图的方式,优化整个session需要执行的代码。

我认为这里比较重要的是理清楚数据在每层神经网络间传递时,数据的结构是怎么变化的,这样才好去设置in_size和out_size。大概是这样:上一层输出矩阵的列数等于下一层权重矩阵的行数,权重矩阵的列数等于当前网络层的神经元个数。

这一段主要是训练效果的可视化,可以观察到拟合曲线的动态变化过程哦,挺不错的。

训练结果:

训练初期,误差比较大。

训练后期,误差逐渐收敛,拟合效果较好。

这是学习速率=0.1,迭代5000次的训练结果,效果还算是不错的。

通过设置不同的学习速率,迭代5000次的结果。可以看到0.1和0.5的效果都挺不错的。所以,针对单个模型,训练效果和学习速率并不是总会呈现某种规律(比如上一篇拟合一次函数那样),需要多次尝试不同的学习速率。

这里固定学习速率为0.1,通过设置不同的神经元个数,观察训练的效果。在神经元个数=10的时候,可以得到较小的误差,但不一定会是最好的。因为当均方差过小的时候,容易产生过拟合,当有新的数据产生的时候,再用这个网络去预测就不一定准确了。

最后,大家如果需要源码,传送门:https://github.com/zhenshi123me/neural-network-learing.git

See you next time!

今天的背景音乐很欢快,我认为还不错,大家记得点一下~

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190113G01JIG00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券