美文网首页
Tensorflow:计算、数据、运行模型

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

作者: 冬风十里Y | 来源:发表于2018-04-21 19:39 被阅读330次

    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)
    

    相关文章

      网友评论

          本文标题:Tensorflow:计算、数据、运行模型

          本文链接:https://www.haomeiwen.com/subject/dcdflftx.html