美文网首页
10分钟快速理解tensorflow结构

10分钟快速理解tensorflow结构

作者: pualrdwade | 来源:发表于2018-10-01 16:40 被阅读0次

    本教程属于基础教程,作者本身也在慢慢学习神经网络的知识,在此只想把一些自己的想法和理解,结合自己的经验写下来给大家做一个参考,新人通过这样一篇'教程大致上可以快速了解tensorflow库的基本结构以及工作流程,适合入门者观看,大约只需要10分钟,我也写的比较简单通俗,希望可以给需要的人带来一些帮助

    1. 张量(tensor)的基本创建与操作
    import tensorflow as tf
    # 默认的数据类型为int类型
    data1 = tf.constant([[1,2,3],[4,5,6]])
    print(data1)
    
    Tensor("Const:0", shape=(2, 3), dtype=int32)
    
    # 可以查看张量的类型
    print(type(data1))
    
    <class 'tensorflow.python.framework.ops.Tensor'>
    

    可以看到,tensorflow的张量tensor可以使用tf.constant进行创建,实际上是对tensor类构造的封装

    # 也可以自己指定数据类型
    data2 = tf.constant([[1,3,4],[5,3,2]],dtype=tf.float32)
    print(data2)
    
    Tensor("Const_1:0", shape=(2, 3), dtype=float32)
    

    我们可以发现目前打印只能够查看到tensor的属性,并不能看到tensor的值,其实这边是整个tensorflow的核心思想,数据与计算被组织成为一个数据流图,如果想要打印,我们则需要创建这个的一个会话Session,这便是与进行交互的外部接口

    # 首先创建session
    sess = tf.Session()
    # 使用run()方法访问数据节点
    print(sess.run(data2))
    
    [[1. 3. 4.]
     [5. 3. 2.]]
    
    1. 数据流图(Graph)

    数据流图是一种常用的并行计算编程模型,并不是针对于深度学习而设计的,数据流图有两个基本的结构:节点,线

    • 节点表示计算单元
    • 线表示节点之间的输入输出关系

    tensorflow的整个过程中,tensor(张量)通过线在各个节点之间进行流动传输(flow),由此便得到了生动的名字:tensorflow

    1. 构建计算图

    tensor不但可以表示输入输出的端点,同时还可以作为运算单元而存在

    # 下面是个例子,定义一个加法单元的tensor并且使用session来运行
    import tensorflow as tf
    const1 = tf.constant(1.2)
    const2 = tf.constant(3.5)
    adder = const1+const2
    sess = tf.Session()
    sess.run(adder)
    
    4.7
    

    可以发现确实是可以作为单独而存在的一个计算单元,我们可以打印查看详细的属性

    print(adder)
    
    Tensor("add_1:0", shape=(), dtype=float32)
    

    上面的例子中,我们发现这样是有缺陷的,我们希望在运行的时候给传入参数,输出得到不同的结果,这种情况我们可以使用tensorflow的变量(占位符)(placeholder)来创建我们的结构

    # 我们使用变量来构建一个图,同时传入参数得到不同的输出
    import tensorflow as tf
    v1 = tf.placeholder(tf.float32)
    v2 = tf.placeholder(tf.float32)
    adder = v1 + v2
    # 打印三个节点,查看属性
    print(v1)
    print(v2)
    print(adder)
    # 使用session运行,同时传入参数(使用字典的方式传参)
    sess = tf.Session()
    print(sess.run(adder,{v1:2.2,v2:3.2}))
    
    Tensor("Placeholder_2:0", dtype=float32)
    Tensor("Placeholder_3:0", dtype=float32)
    Tensor("add_3:0", dtype=float32)
    5.4
    

    在此基础上,我们可以使用函数式编程的思想,对构造的tensor进行封装,从而不断构造更加复杂的功能

    # 对adder节点构造更加复杂的操作
    x = tf.placeholder(tf.float32)
    adder_mul_x = adder * x
    
    # 使用session运行
    sess = tf.Session()
    sess.run(adder_mul_x,{v1:3.9,v2:4,x:2})
    
    15.8
    

    需要注意的是,每次对一个数据流上的节点添加占位符时,使用session运行都要补全所有的placeholder,否则会导致参数错误而报错

    相关文章

      网友评论

          本文标题:10分钟快速理解tensorflow结构

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