本文介绍了tensorflow的基本用法,适合初学者入门,主要包括以下几个内容。


主要内容

  • TensorFlow运行原理
  • 定义常量
  • 定义运算
  • 执行运算
  • 定义变量及初始化
  • 变量的简单操作
  • 输出变量的具体值---eval()函数
  • placeholder占位符
  • 通过feed_dict来改变算子中的变量


TensorFlow运行原理

首先,在使用TensorFlow之前,我们简单介绍一下TensorFlow的运行原理,我们先定义算子(Operation),这些算子的联系构成了一个图。(换句话说,这个图的每个节点就是一个算子)。在TensorFlow中,我们使用图来表示计算任务。TensorFlow通过Session来执行图,完成运算。

定义常量

a = tf.constant(2)			
b = tf.constant([[3., 3.]])

其中,a和b都是我们定义的常量,a是一个数值,b是一个矩阵。在这里,我们强调一下定义矩阵的方式。

f = tf.constant([2, 3, 4])		# 注意,f定义的是一组数据		
g = tf.constant([[4., 5.]])		# g定义的是一个矩阵,定义矩阵必须在[]内!

定义运算

c = tf.add(a, b)		# 加法
c = tf.subtract(a, b)	# 减法
c = tf.multiply(a, b) 	# 点乘
c =tf.div(a, b)			# 除法

同时,我们也可以为我们的算子加上名字

c = tf.add(a, b, name='add')				# 加法
c = tf.subtract(a, b, name='subtract')		# 减法
c = tf.multiply(a, b, name='dot_product') 	# 点乘
c =tf.div(a, b, name='div')					# 除法

在这里,我们区分一下multiply和matmul的用法:

  • multiply:矩阵的点乘,即矩阵的点对点乘积
  • matmul:是我们所说的矩阵相乘,满足矩阵相乘的规则
    下面给出简单的例子
a = tf.constant([[2, 4]])	# 1 * 2的矩阵,既是1行2列
b = tf.constant([[1, 2]])	# 1 * 2的矩阵,既是1行2列
c = tf.constant([[5], [6]])	# 2 * 1的矩阵,既是2行1列

d = tf.multiply(a, b)	# 矩阵的点乘,对应的结果为[1 * 2, 2 * 4] = [2, 8]
e = tf.matmul(a, c)		# 矩阵乘法,结果为[34]

执行运算

这里调用Session,执行运算,调用Session后,需要关闭Session

sess = tf.Session()
result = sess.run(c)
print(result)
sess.close()

上面的代码推荐使用with的这种写法:

with tf.Session() as sess:
    result = sess.run(c)
    print(result)

定义变量及初始化

同时我们可以定义变量。

x = tf.Variable([2, 3])
y = tf.Variable([5, 6])
z = tf.Variable([7, 9])

需要注意的是,在定义变量的时候,我们需要对它进行初始化,才能够使用。而TensorFlow中初始化变量有三种方式:

  • 最简单的初始化全部变量
  • 单独初始化一个变量子集
  • 初始化一个变量

最简单的初始化全部变量

init = tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init)

单独初始化一个变量子集

init_xy = tf.variables_initializer([x, y], name = 'init_xy')    # 初始化x y
with tf.Session() as sess:
    sess.run(init_xy)

初始化一个变量

W = tf.Variable(tf.zeros([784, 10]))
with tf.Session() as sess:
    sess.run(W.initializer)     # 等价于 W.initializer.run()

变量的简单操作

x = tf.Variable([2, 3])
x.initializer  		 # 初始化对象
print(x.value())     # 读取op
x.assign([4, 5])     # 写入op,赋值

输出变量的具体值—eval()函数

# 输出变量内容
W = tf.Variable(tf.truncated_normal([700, 10]))     # 截断高斯分布图
with tf.Session() as sess:
    sess.run(W.initializer)
    print(W)   			# 输出一个tensor信息
    print(W.eval())     # 输出张量具体值

placeholder占位符

通过placeholder可以存放用于训练的数据
tf.placeholder(dtype, shape=None, name=None) dtype:数据类型 shape:数据类型
我们通过字典的方式向placeholder传值

a = tf.placeholder(tf.float32, shape = [3])
b = tf.constant([5, 5, 5], tf.float32)
c = a + b  	 	# c = tf.add(a, b)
with tf.Session() as sess:
    print(sess.run(c, {a: [1, 2, 3]}))  # 通过字典的方式向placeholder传值

通过feed_dict来改变算子中的变量

a = tf.add(2, 5)
b = tf.multiply(a, 3)

with tf.Session() as sess:
    replace_dic = {a: 15}
    res = sess.run(b, feed_dict = replace_dic)
    print(res)