计算图是Tensorflow中最基本的一个概念,Tensorflow中的所有计算都会转化为计算图上的节点。TensorFlow的名字中包含了它最重要的两个概念——Tensor和Flow。Tensor就是张量,在TensorFlow中,张量简单地被理解为多维数组。Flow直观地表达了张量之间通过计算相互转化的过程。Tensorflow是一个通过计算图的形式来表达计算的编程系统。
Tensorflow程序一般分为两个阶段,第一阶段为定义图中所有的计算,第二阶段为执行计算。
计算定义阶段:
import tensorflow as tf
m1=tf.constant([[3,3]],name=“m1”) #创建一个常量op 一行两列
m2=tf.constant([[2],[3]],name="m2") #创建一个常量op 两行一列
result=m1+m2
张量是Tensorflow管理数据的形式,张量可以被简单理解为多维数组。其中零阶张量表示标量(scalar)也是一个数;第一阶张量为向量(vector),是一个一维数组;第n阶张量为n维数组。在张量中并没有真正的保存数字,它保存的是如何得到这些数字的计算过程。
一个张量的主要保存了三个属性:名字(name)、维度(shape)、类型(type)
例:a=tf。constant([1,2],name=“a”,dtype=tf.float32)
张量使用主要总结为两大类:第一类是中间计算结果的引用,上一节的程序中若直接用result=tf.constant([[3,3]],name=“m1”)+tf.constant([[2],[3]],name=“m2”)计算向量的和,可读性会比较差。第二类是当计算图构造完成后,张量可以用来获取计算结果,得到真实的数字。
Tensorflow中使用会话(session)的模式一般有两种:第一种需要明确调用会话生成函数和关闭会话函数,代码如下:
sess=tf.Session() #创建一个会话
sess.run() #使用这个创建好的会话得到运算结果,如:sess.run(result)
sess.close() #关闭会话使本次运行中使用的资源被释放
第二种:
with tf.Session()as sess:
sess.run() #不需要再调用sess.close()函数来关闭会话
简单小程序:
import tensorflow as tf
state=tf.Variable(0,name='counter') #创建一个变量初始化0
new_value=tf.add(state,1) #创建一个op,作用是使state加1
update=tf.assign(state,new_value) #赋值op,把new_value的值赋给state
init=tf.global_variables_initializer() #定义变量,需要变量初始化
sess=tf.Session()
sess.run(init)
for _ in range(5):
sess.run(update)
print(sess.run(state))
sess.close
运行结果:
1
2
3
4
5
Feed操作是指首先建立占位符, 然后把占位符放入op中。在run op的时候, 再把要op的值传进去, 以达到使用时再传参数的目的
语法: 首先创建placeholder 然后再在run的时候把值以字典的方式传入run
#feed
#创建占位符
import tensorflow as tf
input1=tf.placeholder(tf.float32) #占位符
input2=tf.placeholder(tf.float32)
output=tf.multiply(input1,input2)
with tf.Session()as sess:
print(sess.run(output, feed_dict={input1:[8.],input2:[3.]})) #用feed_dict以字典的方式填充占位
#提供字典填充函数,使输入和输出更为简单:feed_dict = {}
运行结果:[24.]
Fetch操作是指TensorFlow的session可以一次run多个op
语法: 将多个op放入数组中然后传给run方法
import tensorflow as tf
input1=tf.constant(3.0) #fetch
input2=tf.constant(2.0)
input3=tf.constant(5.0)
add=tf.add(input2,input3)
mul=tf.multiply(input1,add)
with tf.Session()as sess:
result=sess.run([mul,add])
print(result)
运行结果:[21.0, 7.0]
参考书:《TensorFlow实战Google深度学习框架》——郑泽宇 顾思宇 著