TensorFlow使用图来表示计算任务,图中的节点被称之为op(operation的缩写)。TensorFlow程序通常被组织成一个构建阶段,和一个执行阶段。在构建阶段,op的执行步骤被描述成一个图。在执行阶段,使用会话执行图中的op(op就是节点)。简单的说,先给出描述,只在run()方法中执行操作。
运行会话的方式有两种,一种是使用Session类的run()方法,另一种是使用Tensor.eval()和Operation.run()组合,这种方式也叫做交互式使用,这样可以避免使用一个变量来持有会话。
1.TensorFlow做矩阵乘法运算
下面的代码有详尽的注释,我们可以清楚的看到图的构建,和图的执行。
注意代码第二行,如果你使用了中文注释,请务必加上这行代码,否则会因为中文注释报错。
#!/usr/bin/env python # -*- coding: utf-8 -*- import tensorflow as tf matrix1 = tf.constant([[3., 3.]]) #1*2矩阵op matrix2 = tf.constant([[2.],[2.]]) #2*1矩阵op product = tf.matmul(matrix1, matrix2) #矩阵乘法op sess = tf.Session() #创建图 result = sess.run(product) #run运行图 print result sess.close() #session使用完后要释放
2.TensorFlow的交互式使用:矩阵减法的例子
运行是在特定的时候进行,与前面的例子不同,运行变成了由op的run方法驱动。
eval()方法只能在一个已启用会话的图中调用该tensor的值。
#!/usr/bin/env python # -*- coding: utf-8 -*- import tensorflow as tf sess = tf.InteractiveSession() x = tf.Variable([1., 2.]) a = tf.constant([3., 3,]) x.initializer.run() #调用initializer op的run方法初始化x sub = tf.sub(x, a) print sub.eval() #调用eval方法得到值
3.TensorFlow做线性回归拟合参数
下面的例子就非常经典了,这是TensorFlow官方教程的第一个demo,代码已经加了注释,大家可以细细品味。
这个例子开始使用GD(Gradient Decent)优化参数,也就带有机器学习的意味,对于理解tensorflow构建机器学习系统非常重要。
#!/usr/bin/env python # -*- coding: utf-8 -*- import tensorflow as tf import numpy as np x_data = np.float32(np.random.rand(2, 100)) y_data = np.dot([0.100, 0.200], x_data) + 0.300 #产生一组服从线性的随机数组 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 #定义变量op loss = tf.reduce_mean(tf.square(y - y_data)) #定义loss损失op optimizer = tf.train.GradientDescentOptimizer(0.5) #定义使用GD方法优化参数 train = optimizer.minimize(loss) #定义使用GD减小loss init = tf.initialize_all_variables() #定义变量初始化op sess = tf.Session() sess.run(init) #创建会话并进行初始化 for step in xrange(0, 201): #进行迭代 sess.run(train) if step % 20 == 0: print step, sess.run(W), sess.run(b)
Caffe由配置文件定义网络结构,而TensorFlow通过图的方式定义运算,是一种符号化的运算方法。这篇博客通过代码由浅入深的介绍了TensorFlow进行数学运算和机器学习的过程,基本上就是按照先定义op,再运行会话的方式进行,会话可以由op发起也可以由session发起。这就理解了TensorFlow构架机器学习和深度学习系统的过程。
OK,See You Next Chapter!