TensorFlow-平面曲线拟合
平面曲线属于非线性函数,至少需要 3 层的神经网络(输入层,隐藏层x1,输出层)来实现,为达到较好的效果,可尝试更多层,下面的例子使用了2层隐藏层,采用最基本的全连接形式,隐藏层的神经元个数没有严格要求,根据实际项目选择,下面例子选用8个。
下面通过代码实现:
- 引入相关库,定义神经网络层
1 | import tensorflow as tf |
生成些输入数据并导入网路
因为要拟合平面曲线,输入
x
和输出y
均为一维数据
1 | # 导入数据,这里的x_data和y_data并不是严格的一元二次函数的关系 |
搭建网络
输入层
:神经元个数1(输出1)隐藏层1
:神经元个数8(输入1,输出8)隐藏层2
:神经元个数8(输入8,输出8)输出层
:神经元个数1(输入8,输出1)
1 | # 定义隐藏层【l1】和【l2】,利用之前的add_layer()函数 |
- 损失函数
1 | # 计算预测值prediction和真实值的误差,对二者差的平方求和再取平均 |
- 梯度下降法
1 | # tf.train.GradientDescentOptimizer()中的值通常都小于1, |
- 训练前的初始化操作
1 | # 使用变量时,都要对它进行初始化 |
- 使用matplotlib可视化结果
1 | fig = plt.figure() #先生成一个图片框 |
- 训练过程
1 | # 学习1000次。学习内容是train_step, 用Session来run每一次training的数据 |
运行结果
可以看出,随着训练的进行,损失函数的值不断减小,同时拟合出的结果(红线)不断接近原始训练数据(蓝点),增加训练次数可以提高拟合精度。
注意,每次运行的结果会略有不同,下图结果在最后一轮显示时出现了跳变,同时损失函数值略有增加,原因在于训练参数没有始终朝着最优变化,会有一些抖动,可能是梯度下降时到达某个局部最小点后又向外跳出,可通过重新训练、增加训练次数或调整学习率等方式解决。
-------------纸短情长 下次再见-------------
关注微信公众号,获取更多精彩~
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 码农爱学习的博客!
评论