使用Tensorflow进行算法设计与训练的核心步骤:
·(1)准备数据
·(2)构建模型
·(3)训练模型
·(4)进行训练
以上步骤就是使用Tensorflow进行算法设计与训练的核心步骤,贯穿后面介绍的具体实战。
下面以一个单变量的线性方程来展示:
方程:Y =w * x + b
数据集:人工数据集,随机生成一个近似采样随机分布,w= 2, b=1,噪声最大振幅0.4
![fcd266eefee192ba01a302200b8fc7ef.png](https://i-blog.csdnimg.cn/blog_migrate/267559d5cfaaf16c2278442d6eaa9526.jpeg)
人工数据集
首先,导入相关库
![f7083bc9f6bbe48ce73d0ce13c032abd.png](https://i-blog.csdnimg.cn/blog_migrate/689bd5da536d3415fbf4c2548b7504fa.jpeg)
(1)准备数据
直接采用np生成等差数列的方法,生成100个点,每个点的取值在-1,1之间,
构造满足这个函数的x和y的同时加入一些不满足方程的噪声.
![5246a837b73f6f66e69026d5a643825a.png](https://i-blog.csdnimg.cn/blog_migrate/542d663c87ebc4e579eb7399acc498f1.jpeg)
(2)构建模型
·定义模型,实现前行计算
·创建待优化变量,Tensorflow变量的声明函数是tf.Variable,tf.Variable的作用是保存和更新参数,变量的初始值可以是随机数、常数,或是通过其他变量的初始值计算得到
·定义损失函数,损失函数用于描述预测值与真实值之间的误差,从而指导模型收敛方向;
常见损失函数:均方差(Mean Square Error, MSE)和交叉熵(cross-entropy)
![39b0c81d3cb4d258cb3fc0de92ad78df.png](https://i-blog.csdnimg.cn/blog_migrate/f390c2a6bd55e74b533c35e29dec19e7.jpeg)
(3)训练模型
·设置训练超参数,training_epochs 、learning_rate ;学习率的作用:控制参数更新的幅度。如果学习率设置过大
,可能导致参数在极值附近来回摇摆,无法保证收敛。如果学习率设置过小,虽然能保证收敛,但优化速度会大大降低,我们需要更多迭代次数。
·定义计算梯度函数,计算样本数据[x,y]在参数[w,b]点上的梯度
![6de944896a3086cc091d4ef28d01906c.png](https://i-blog.csdnimg.cn/blog_migrate/137c448c45613ac5e6e91f5a7794ec19.jpeg)
·执行训练(SGD)
![9f3fb5c1a307c590a7cbdb71e04e6211.png](https://i-blog.csdnimg.cn/blog_migrate/502cb04fab92030d792847040f9ae40c.jpeg)
执行训练代码
![106c711a6af3154b8a85e7451d877dbd.png](https://i-blog.csdnimg.cn/blog_migrate/c1663ae13ef46d4b056764c95755e5bc.jpeg)
损失函数值变化
![cc96fef4684c1b9a059b8cb39c5892b4.png](https://i-blog.csdnimg.cn/blog_migrate/31fbec2eda4fcc0931b2dece17a2dc4d.jpeg)
迭代训练结果图
从上图可以看出,本案例所拟合的模型较简单,训练5轮之后已经接近收敛,对于复杂模型,需要更多次训练才能收敛
·显示结果
![c66f2ba1ff1b86bea255b7bf46d42aab.png](https://i-blog.csdnimg.cn/blog_migrate/aa781624ecd9ea7c607f27e147c087ff.jpeg)
w,b最终取值
结果可视化
![9fa8fc44e71cebe74c4f45570b6a7a27.png](https://i-blog.csdnimg.cn/blog_migrate/57f2d11d7ad99caf3fabf96c8631d045.jpeg)
数据分布(蓝色点)与模型(红线)可视化
(4)进行训练
![99ea7663f5b056b208c2d7aa61b8b1ba.png](https://i-blog.csdnimg.cn/blog_migrate/c82ae153c1f931f69e390f84b372839f.jpeg)
测试结果
从输出结果看,预测值与目标值误差极小,本次预测成功!