TensorFlo快速入门
TensorFlow是一个数值计算库,其中数据(Tensor,张量)在计算图中流动。数据在TensorFlow用被称为张量的n维数据表示。计算图由数据和数学操作符构成。
- 计算图中的节点代表数学操作符
- 计算图中的边代表操作符之间的张量
计算图(Graph)
在TensorFlow中,一个计算图表述了计算过程。当你创建计算图时,变量还没有值。只有你在会话(Session)中运行计算图,变量才有值。在我们正式使用TensorFlow之前,先将其导入。
计算图是TensorFlow的核心概念之一,每个计算/操作/变量都在计算图上机型。代码中发生的一切都在TensorFlow提供的默认计算图中进行。我们可以通过以下方式访问此图:
graph = tf.get_default_graph()
可以通过用graph.get_operations()
来查看所有的操作。
输出为空,因为我们并没有在计算图上添加任何东西。
或者,我们可以用
for op in graph.get_operations():
print(op.name)
来查看默认计算图中所有操作的名字。当然,我们也可以同时创建多个计算图。
会话(Session)
一个计算图可以用来定义操作,但这些操作只能在会话中执行。计算图和会话可以分别独立创建。我们可以把计算图想成是施工图纸,而会话就是施工现场。
可以按照如下方式创建会话:
sess = tf.Session()
... your code ...
... your code ...
sess.close()
每次打开一个会话时,记住要关闭它。或者使用with
块,
with tf.Session() as sess:
sess.run(f)
使用with
块的优点是:会话在with
块结束时会自动关闭。
张量(Tensor)
TensorFlow用张量来保存数据,有点像numpy用多维数组保存数据(还是不一样呢!)。
常量(Constant)
常量就意味着它的值不能变,我们可以按如下方式定义常量:
可以看到并不像在Python中,定义了一个常量就可以打印出其值。我们如果想要访问或者输出一个常量的值,必须要在会话中执行。
变量(Variable)
与常量不同,变量可以包含不同的值。但是,它需要由初始化操作进行初始化。对每个变量会很费力。TensorFlow提供了一次性初始化所有变量的机制:
init_op = tf.global_variables_initializer()
init_op
将会加到默认的TensorFlow计算图中。如果我们要访问变量,在其之前执行init_op
操作即可。
现在,我们再次尝试输出所有操作的名字:
占位符(Placeholder)
占位符是等待初始化/feed的张量。占位符用于训练数据,这些数据仅在代码在会话中运行时提供。给占位符的内容称为feed_dict。 Feed_dict是用于保存数据的键值对:
线性回归(Linear Regression)
接下来,我们用上述知识尝试做一个线性回归的任务。
可以先创建一些点,
定义两个占位符,用来feed数据(trainX
和trainY
):
X = tf.placeholder('float')
Y = tf.placeholder('float')
线性回归模型是y_model = w * x + b
,我们得通过模型计算得到w
和b
的值。初始化w
和b
的值为0。代价函数定义为(Y - y_model) ^ 2
。TensorFlow中包含了许多优化器可以用来计算并更新梯度以最小化某个代价函数。在这里,我们可以GradientDescentOptimizer
并设置学习速率为0.01。
w = tf.Variable(0.0, name='weight')
b = tf.Variable(0.0, name='bias')
y_model = tf.multiply(w, X) + b
cost = tf.pow(Y - y_model, 2)
train_op = tf.train.GradientDescentOptimizer(0.01).minimize(cost)
现在已经定义好了计算图。为了进行计算,我们需要在会话中执行代码:
with tf.Session() as sess:
sess.run(init_op)
for i in range(100):
for (x, y) in zip(trainX, trainY):
sess.run(train_op, feed_dict={X:x, Y:y})
print(sess.run(w), sess.run(b))
计算结果为:
可以得到下图:
参考
上一篇: 《算法导论》学习笔记之Chapter9中位数和顺序统计量
下一篇: excel之列联表分析