Tensorflow &&python实战--用梯度下降的优化方法来快速解决线性回归问题

  作为一个TensorFlow的初探者,在这用博客的形式来记录自己的学习过程,对于自己的总结复习,同时也希望对于同样是新手的朋友也会有有所帮助。

环境准备:

  操作系统:Linux,语言:python,框架:TensorFlow,编辑器:vim。

在Linux系统下进入python,TensorFlow环境,命令如下:Tensorflow &&python实战--用梯度下降的优化方法来快速解决线性回归问题

 再用vim编辑器生成和编辑python文件:按下回车键将会自动进入vim编辑中

Tensorflow &&python实战--用梯度下降的优化方法来快速解决线性回归问题

引入我们所需要的包,字符集,我们即将开始编程:

Tensorflow &&python实战--用梯度下降的优化方法来快速解决线性回归问题

1 数据的构建:

  我们为什么要构建数据呢?因为在现实生活中,我们收集的数据是随机的,所以我们通过电脑随机生成数据,来模拟我们从生活中获得的数据。来我们先看命令:

Tensorflow &&python实战--用梯度下降的优化方法来快速解决线性回归问题

points_num是值位100的一个整形常量,代表我们的样本的点为100个

vectors=[ ]表示创建一个空的list,注意这个list中的元素可以是一维张量。

接下来是一个for循环,我们注意到有xrang函数,和rang函数的效果一样,但是内在有不同:

>>>xrange(8)

xrange(8)

>>> list(xrange(8))

[0, 1, 2, 3, 4, 5, 6, 7]

>>> range(8)

# range 使用[0, 1, 2, 3, 4, 5, 6, 7]

我们可以观察到,rang和xrang生成一个顺序数列

rang(x,y,z)包含重载(意思是函数可以传1个,或者2个参数,等等),这里的x:开始数字,y:结尾数字。z:步长。

包含开始数字,而不包含结尾数字。

np.random.normal(x,y):

numpy中

[python] view plain copy
  1. numpy.random.normal(loc=0.0, scale=1.0, size=None)  
参数的意义为:

loc:float

概率分布的均值,对应着整个分布的中心center

scale:float

概率分布的标准差,对应于分布的宽度,scale越大越矮胖,scale越小,越瘦高

size:int or tuple of ints

输出的shape,默认为None,只输出一个值

我们更经常会用到np.random.randn(size)所谓标准正太分布(μ=0, σ=1),对应于np.random.normal(loc=0, scale=1, size)

2  画出创建的数据:

Tensorflow &&python实战--用梯度下降的优化方法来快速解决线性回归问题

这有详细的绘图指南:https://www.cnblogs.com/webary/p/5813855.html

plt.legend():

 是让图例生效

3 构造回归模型:

Tensorflow &&python实战--用梯度下降的优化方法来快速解决线性回归问题这是tf.variable的具体用法:http://blog.****.net/uestc_c2_403/article/details/72328296

  1. import tensorflow as tf;    
  2. import numpy as np;    
  3. import matplotlib.pyplot as plt;    
  4.     
  5. a1 = tf.Variable(tf.random_normal(shape=[2,3], mean=0, stddev=1), name='a1')  
  6. a2 = tf.Variable(tf.constant(1), name='a2')  
  7. a3 = tf.Variable(tf.ones(shape=[2,3]), name='a3')  
  8.   
  9. with tf.Session() as sess:  
  10.     sess.run(tf.initialize_all_variables())  
  11.     print sess.run(a1)  
  12.     print sess.run(a2)  
  13.     print sess.run(a3)  
输出:

[[ 0.76599932  0.99722123 -0.89361787]
 [ 0.19991693 -0.16539733  2.16605783]]
1
[[ 1.  1.  1.]

 [ 1.  1.  1.]]

tf.random_uniform:

tf.random_uniform(shape,minval=0,maxval=None,dtype=tf.float32,seed=None,name=None)
    返回一个形状为shape的tensor,其中的元素服从minval和maxval之间的均匀分布。

tf.reduce_mean():

tf.reduce_mean(x) ==> 2.5 #如果不指定第二个参数,那么就在所有的元素中取平均值
tf.reduce_mean(x, 0) ==> [2., 3.] #指定第二个参数为0,则第一维的元素取平均值,即每一列求平均值
tf.reduce_mean(x, 1) ==> [1.5, 3.5] #指定第二个参数为1,则第二维的元素取平均值,即每一行求平均值


tf.train.GradientDescentOptimizer(learingRate).minimize(loss):

这里learingRate为梯度下降法的学习速率tf.train.GradientDescentOptimizer()返回一个optimizer,参数为learningRate,这个运算的目的就是最小话loss。

4 咱们开始训练! 

Tensorflow &&python实战--用梯度下降的优化方法来快速解决线性回归问题

5 绘制所有的点和最佳的你和曲线。

Tensorflow &&python实战--用梯度下降的优化方法来快速解决线性回归问题

注意里边用到的参数只要是用tf构造的,记得要run 一 run.