本文介绍了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)