本文通过模拟产生数据,构造简单的线性模型,使用TensorFlow工具,利用梯度下降算法,估计模型系数,给出收敛效果,so,let’s begin , just do it !
首先加载我们将要用的的库
import tensorflow as tf
import numpy as np
模拟产生数据
x_data = np.random.rand(100).astype(np.float32)
公式
y_data =0.5* x_data**2 + 0.3
下面看看我们画图看看数据到底长成什么样子,是不是美丽的
从图中我们是可以看出二次趋势的,下面开始我们的tensorflow模拟过程。
产生Tensorflow结构的数据
### create tensorflow Weights and biases ###
Weights = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
biases = tf.Variable(tf.zeros([1]))
公式和上面一样
### generate formula as above
y = Weights*x_data**2 + biases
优化过程
首先,定义损失函数(这里使用MSE)
### define loss function
loss = tf.reduce_mean(tf.square(y-y_data))
使用梯度下降最优化损失函数,步长暂定为0.05
### define optimization:use GradientDescentOptimizer
### choose learning rate : 0.05 or other ...
optimizer = tf.train.GradientDescentOptimizer(0.05)
极小化损失函数
### minimize optimize
train = optimizer.minimize(loss)
初始化变量
###initial variables
init = tf.global_variables_initializer()
结束创建tensorflow结构,并且run起来
### create tensorflow structure end ###
sess = tf.Session()
sess.run(init)
我们选择迭代次数为400次,部分打印优化得到的结果
for step in range(401):
sess.run(train)
if step % 10 == 0:
print(step, sess.run(Weights), sess.run(biases))
#迭代结果
0 [ 0.45762387] [ 0.31559378]
20 [ 0.46390951] [ 0.31328076]
40 [ 0.46926278] [ 0.3113108]
60 [ 0.47382206] [ 0.30963311]
80 [ 0.477705] [ 0.3082042]
100 [ 0.48101205] [ 0.30698729]
120 [ 0.48382849] [ 0.30595091]
140 [ 0.48622724] [ 0.30506817]
160 [ 0.48827016] [ 0.30431643]
180 [ 0.49001008] [ 0.30367616]
200 [ 0.49149185] [ 0.30313087]
220 [ 0.49275389] [ 0.30266646]
240 [ 0.49382871] [ 0.30227098]
260 [ 0.49474409] [ 0.30193409]
280 [ 0.49552372] [ 0.30164719]
300 [ 0.49618763] [ 0.30140293]
320 [ 0.49675313] [ 0.30119479]
340 [ 0.49723473] [ 0.30101761]
360 [ 0.49764487] [ 0.30086669]
380 [ 0.49799421] [ 0.3007381]
400 [ 0.49829179] [ 0.30062863]
看看预测效果
pre = sess.run(Weights)*x_data**2 + sess.run(biases)
对比效果
为方便将我们的预测结果与原始数据做对比,选择迭代次数变化过程中拟合效果的可视化展示:
import matplotlib.pyplot as plt
fig,ax = plt.subplots(figsize=(20,10))
plt.plot(x_data,pre,'bo',label="Predicted data",color='red')
plt.plot(x_data,y_data,"bo",label="Original data",color='blue')
"""open the grid"""
plt.grid(True)
plt.legend(bbox_to_anchor=(1.0, 1), fontsize=25,loc=1, borderaxespad=0.)
plt.title("Linear Model: iteration 100 times : y =0.5*x^2 + 0.3",fontsize=25)
plt.show()
迭代100次效果:
迭代200次效果:
迭代300次效果:
迭代400次效果:
固定学习率,从迭代次数逐渐增加的过程中可以看出拟合效果也是逐渐刚刚的好。
一个tensorflow的简单小栗子就这样告成了,欢迎指正。