TensorFlow通过"图"和会话的方式分离了计算的定义和执行,即它的运行机制是"定义"与"运行"相分离的。从操作层面可以把它抽象成两种:模型构建和模型运行。
TensorFlow模型中的几个概念:
①张量(tensor):数据,即某一类型的多维数组
②变量(Variable):常用于定义模型中的参数,是通过不断训练得到的值
③占位符(placeholder):输入变量的载体,也可以理解成定义函数时的参数
④"图"中的节点操作(operation,OP):即一个OP获得0个或多个tensor,执行计算,输出额外的0个或多个tensor
关于"图"的概念:
①一个"图"代表一个计算任务
②在模型运行的环节中,"图"将在会话(session)里被启动
③session将"图"的OP分发到如CPU或GPU之类的设备上,同时提供执行OP的方法。这些方法执行后,将产生的tensor返回。在Python语言中,返回的tensor是numpy ndarray对象,在C和C++语言中,返回的tensor是TensorFlow::Tensor实例
session与"图"的工作关系如下图所示:
"图"的运行情况有3种应用场景:
①训练场景:
即实现模型从无到有的过程,通过对样本的学习训练,调整学习参数,形成最终的模型。其过程是将给定的样本和标签作为输入节点,通过大量的循环迭代,将图中的正向运算(从输入的样本通过OP运算得到输出的方向)得到的输出值,再进行反向运算(从输出到输入的方向),以更新模型中的学习参数,最终使模型产生的正向结果最大化地接近样本标签。这样就得到了一个可以拟合样本规律的模型
②测试场景:
即利用"图"的正向运算得到的结果与真实值进行比较的过程
③使用场景:
即利用"图"的正向运算得到结果,并直接使用。该场景下,模型与函数相比,输入的样本就是实参,占位符就是形参,运算过程相当于函数体,得到的结果相当于返回值
session的建立使用
session的建立共分为4种方法:
①创建对象实例
import tensorflow as tf
#定义一个常量
hello = tf.constant('Hello,Tensorflow!')
#建立一个session
sess = tf.Session()
#通过session里的run函数来运行结果
print(sess.run(hello))
#关闭session
sess.close()
②使用with语法
import tensorflow as tf
#定义两个常量
a = tf.constant(3)
b = tf.constant(4)
#建立session
with tf.Session() as sess:
print("相加: %i"%sess.run(a + b))
print("相乘: %i"%sess.run(a * b))
#with session的用法是最常见的,沿用了Python中with的语法,即当程序结束后会自动关闭session,而不需要再去写close
③使用交互式session方式
import tensorflow as tf
#定义两个常量
a = tf.constant(3)
b = tf.constant(4)
#建立一个有交互式功能的session
#运行结果
print(a.eval())
print(b.eval())
#关闭session
sess.close()
#一般在Jupyter环境下使用较多,具体用法与with session类似。不需要用session的run函数这种形式运行。而是定义好会话对象后,每次执行时,调用tensor.eval()即可
④使用Supervisor方式,该方式更高级一些,可以自动来管理session中的具体任务,例如,载入/载出检查点文件、写入TensorBoard等,另外该方法还支持分布式训练的部署。