TensorFlow学习笔记(二)——基于图会话数学运算工具

        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!

发表评论