本文基于程序版本:python 3.5.5 和 tensorflow 1.9.0
1. 目的
生成一些三维数据,并使用tensorflow进行平面拟合
2. 代码实现和注解
1)加载库
import numpy as np
import tensorflow as tf
2)生成伪随机数据
# process data
x_data = np.float32(np.random.rand(2, 100))
y_data = np.dot([0.100, 0.200], x_data) + 0.300 # dot product of 2 arrays
其中,no.dot()函数功能为点除,即让矩阵中的每对元素都除以[0.1, 0.2]
3)建立线性模型
# build linear model
b = tf.Variable(tf.zeros([1]))
w = tf.Variable(tf.random_uniform([1, 2], -1.0, 1.0))
y = tf.matmul(w, x_data) + b
其中,
- tf.Variable()的功能是创建一个当调用run()函数时能在图(graph)中维持状态的变量
- tf.zeros()创建对应维度的零张量(tensor)
- tf.random_uniform()获取服从均匀分布的随机变量
- tf.matmul()矩阵乘法运算
4)最小化方差
# minimize square-error
loss = tf.reduce_mean(tf.square(y - y_data))
optimizer = tf.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss)
其中,
- tf.reduce_mean()计算穿过一个张量维度所有元素的平均值
- tf.train.GradientDescentOptimizer()实现梯度下降算法的优化器,参数为学习速率
- optimizer.minimize()给优化器增加通过更新损失序列(var_list)来最小化损失(loss)的操作
5)初始化变量
# initialize variables
init = tf.global_variables_initializer() # tf.initialize_all_variables() is deprecated
其中,
- tf.global_variables_initializer()用以初始化全局变量
- 需要注意的是,tf.initialize_all_variables()在tensorflow 1.6.0版本中已被移除
6)启动图
# start graph
sess = tf.Session()
sess.run(init)
其中,
- tf.Session()实例化封装好需要执行的操作(operation)和需要计算的张量环境的对象
- sess.run()对传递过来的变量进行相应操作和计算张量
7)拟合平面
# fit plane
for step in range(0, 201): # similiar as xrange, which is deprecated
sess.run(train)
if step % 20 == 0:
print(step, sess.run(w), sess.run(b))
打印结果:
0 [[ 0.2897141 -0.30422795]] [0.9615625]
20 [[0.05661043 0.02623773]] [0.4093204]
40 [[0.07334512 0.15256079]] [0.33803657]
60 [[0.08760083 0.18628207]] [0.31359386]
80 [[0.09479188 0.19579038]] [0.30494767]
100 [[0.09791644 0.19863556]] [0.3018224]
120 [[0.09918789 0.19953729]] [0.3006764]
140 [[0.09968808 0.19983763]] [0.30025226]
160 [[0.09988122 0.19994164]] [0.30009434]
180 [[0.09995499 0.19997868]] [0.30003536]
200 [[0.09998299 0.19999214]] [0.30001327]
可见,在经过200次迭代计算后,最佳拟合结果为:
w:[0.09998299 0.19999214], b:[0.30001327]
3. TensorFlow的一些基本概念
5个词
变量(variable)
- 用以维护状态
操作(operation)
- 图中的节点
- 使用feed或者fetch方法可以对那个任意的操作赋值或者从中获取数据
张量(tensor)
- 类型化的多维数组,表示数据
图(graph)
- 也称为计算图,表示计算任务,描述了计算的过程
会话(session)
- 在会话的上下文(context)执行图
2个阶段
TensorFlow程序通常分为构建阶段和执行阶段
1 构建阶段:
将操作的执行步骤描述为一个图(如创建一个图来表示和训练神经网络)
2 执行阶段:
使用会话执行图中的操作(如反复执行图中的训练操作)
一般计算过程
图在会话中启动 -> 会话将图中的操作分发给CPU或者GPU(同时提供执行操作的方法) -> 方法执行结束后将产生的张量返回
需要注意的是:在 Python 语言中, 返回的 tensor 是 numpy ndarray 对象; 在 C 和 C++ 语言中, 返回的 tensor 是 tensorflow::Tensor 实例