您的位置:首页 > 其它

Tensorflow学习笔记(一):初识TensorFlow——实现线性回归

2017-10-31 17:00 316 查看

在使用 TensorFlow时要注意几点:

使用图 (graph) 来表示计算任务

在被称之为会话 (Session) 的上下文 (context) 中执行图

使用tensor表示数据

通过变量(Variable)维护状态

使用feed和fetch可以为任意的操作(arbitrary operation) 赋值或者从其中获取数据

利用TensorFlow实现简单的线性回归估计:

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt

num_points = 1000
vectors_set = []

x1 = np.random.normal(0.0,0.55,num_points)
y1 = x1*0.2+0.5+np.random.normal(0.0,0.02,num_points)

plt.scatter(x1,y1,c='r')
plt.show()


先造一组数据:在y=0.2x+0.5上采集1000个点并加上随机偏移。显示出来如下所示:



利用TensorFlow来对上面的数据进行线性回归拟合

w = tf.Variable(tf.random_uniform([1],-1.0,1.0),name='w')
b = tf.Variable(tf.zeros([1]),name='b')

y = w*x1+b
loss = tf.reduce_mean(tf.square(y-y1),name='loss')
optimizer = tf.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss,name='train')
sess = tf.Session()
init = tf.global_variables_initializer()

sess.run(init)

print('w=',sess.run(w),'b=',sess.run(b),'loss=',sess.run(loss))
for i in range(20):
sess.run(train)
print('w=',sess.run(w),'b=',sess.run(b),'loss=',sess.run(loss))


w初始化为一个随机变量,b初始化为0(TensorFlow的变量定义真麻烦)

定义损失函数loss,为所有样本预测值与真值差的平方的均值。

优化器采用梯度下降法,学习率为0.5

TensorFlow要用tf.global_variables_initializer()来初始化各个变量

迭代20次,loss越来越小,w与b越来越接近设定值.



总结

TensorFlow使用图来表示计算任务,图中的节点称之为op(operation)

TensorFlow程序被可分成一个构建阶段和一个执行阶段

构建阶段:是要创建图,也就是创建op,如常量这种源op(不需要输入),还有其他的运算处理op,它们的返回值是可以传递给其他op作为输入的。

执行阶段:在一个会话中启动图。创建一个Session,并调用Session.run()来执行操作。

注意:对于上例中的train,在调用run()执行表达式之前,并不会执行训练操作。

TensorFlow的这种用会话来执行图的计算方式看起来非常“别扭”。这主要是因为TensorFlow乃至Python为了实现一些高效的数值计算或复杂运算,都会用到一些其他函数库,这些库一般都是用外部语言(C++)实现的,从外部计算切换回Python开销很大,即使用GPU或者分布式计算方式,这部分开销都不可忽略。所以TensorFlow不单独运行单一复杂操作,都是先用图来描述一系列可交互的计算操作,然后全部一起在Python之外运行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: