Tensorflow:计算、数据、运行模型

2018-04-21  本文已影响330人  冬风十里Y

Tensorflow已经用了一些和时间并且跑过一些项目了。但是当时用的比较急匆匆,所以对于一些比较基础的内容并没有太深入的了解,导致现在出了问题,如果Stack Overflow上没有,只能仰天长叹,重启IDE和系统,祈求上天让我发出程序员终极问题之二:“这是怎么好的??”(终极问题之一:“这程序哪里有错???”)

逆练九阴真经不可取。

于是下定决心,最近把tensorflow再过一遍。当初选用deep learning 框架的时候也是纠结了一番,时间有限,比较主流的有caffe/tensorflow/pytorch/torch,评论讲caffe在逐渐被淘汰且灵活度较低,义无反顾入坑tf(虽然caffe也用过)。时过境迁,caffe的生命力在逐渐下降,甚至连tensorflow也有些过气,听说pytorch正异军突起?

闲话少说,书归正传(这闲话就不少了),咱们打板就唱。

计算模型、数据模型、运行模型

计算模型——计算图

所谓Tensorflow,即为Tensor+flow,tensor指数据模型张量,flow指计算模型“流”。计算图就是tensorflow中用来表示数据之间的计算关系,记录数据“流”向的结构。

计算图中使用结点表示运算形式,结点之间的箭头连线描述了计算之间的依赖关系。

Tensorflow 在使用中需要首先定义计算图来明确各种变量之间的计算关系,然后才是执行计算。

可以通过定义自定义计算图并命名来确定变量的作用范围,如果没有特意指定计算图,将使用当前默认的计算图进行运算。

数据模型——张量

Tensorflow中,张量是一种特殊的数据结构,可以简单理解为向量,但并不完全等价。张量中保存的并不是数组数字,而是对运算结果的引用,保存的是如何得到这些结果的过程。
如果要获得计算结果,可以使用tf.Session().run(result)得到计算结果。

张量中主要保存了三个属性:“名字(name)”、“维度(shape)”、“类型(type)”。

运行模型——会话

会话(Session)的意义就是执行上面定义好的张量(Tensor)和计算图(graph)进行运算。
举个栗子,计算图是计划书,张量是完成计划所需要的物资,会话就是计划的执行者。会话拥有并管理Tensorflow程序运行时的所有资源。

使用会话的两种模式:

sess = tf.Session()
sess.run(...)
sess.close()
with tf.Session() as sess:
    sess.run(...)

第一种方式需要手动close session,如果因为异常退出或者忘记close 将会导致资源泄露。第二种当上下文管理器退出的时候会自动释放所有资源。推荐使用第二种方式。

当默认的会话被制定之后可以通过tf.Tensor.eval来计算一个张量的取值。以下代码展示了通过设定默认会话计算张量的取值。

sess = tf.Session()
with sess.as_default():
    print(result.eval())

等价于:

sess = tf.Session()
print(sess.run(result))
print(result.eval(session = sess))

下面给出通过ConfigProto配置会话参数的方式:

config = tf.ConfigProto(allow_soft_placement = True,
log_device_placement = True)
config.gpu_options.allow_growth=True  
sess = tf.Session(config = config)
上一篇下一篇

猜你喜欢

热点阅读