Tensorflow语法基础(1)

作者: 南风无影 | 来源:发表于2017-02-23 18:32 被阅读1389次

    参考极客学院基础教程

    tensorflow学习笔记二:入门基础

    TensorFlow用张量这种数据结构来表示所有的数据。用一阶张量来表示向量,如:v = [1.2, 2.3, 3.5] ,如二阶张量表示矩阵,如:m = [[1, 2, 3], [4, 5, 6], [7, 8, 9]],可以看成是方括号嵌套的层数。

    1. 编辑器
      编写tensorflow代码,实际上就是编写py文件,最好找一个好用的编辑器,如果你用vim或gedit比较顺手,那也可以的啦。我们既然已经安装了anaconda,那么它里面自带一个还算不错的编辑器,名叫spyder,用起来和matlab差不多,还可以在右上角查看变量的值。因此我一直使用这个编辑器。它的启动方式也很简单,直接在终端输入spyder就行了。

    Note:
    用Anaconda自带的IDE spyder编辑python时,发现无法导入tensorflow模块,我猜测应该时IDE的搜索路径没有包含tensorflow的路径吧(未仔细研究),然后我在Anadconda的安装路径中找到了/envs/tensorflow/lib/python2.7,并将该路径中的site-packages文件夹中的所有文件拷贝到,Anaconda安装路径下的lib/python2.7/site-packages文件夹中,之后再次打开IDE,发现已经可以import了!!!!

    cd  anaconda
    cp -rf  envs/tensorflow/lib/python2.7/site-packages/* lib/python2.7/site-packages/
    
    屏幕快照 2017-02-23 下午6.08.51.png
    1. 常量
      我们一般引入tensorflow都用语句
      import tensorflow as tf
      因此,以后文章中我就直接用tf来表示tensorflow了。
      在tf中,常量的定义用语句:
    a=tf.constant(10)
    

    这就定义了一个值为10的常量a

    1. 变量
      变量用Variable来定义, 并且必须初始化,如:
    x=tf.Variable(tf.ones([3,3]))
    y=tf.Variable(tf.zeros([3,3]))
    

    分别定义了一个3x3的全1矩阵x,和一个3x3的全0矩阵y,0和1的值就是初始化。
    变量定义完后,还必须显式的执行一下初始化操作,即需要在后面加上一句:

    init=tf.initialize_all_variables()
    

    这句可不要忘了,否则会出错。

    1. 占位符
      变量在定义时要初始化,但是如果有些变量刚开始我们并不知道它们的值,无法初始化,那怎么办呢?
      那就用占位符来占个位置,如:
    x = tf.placeholder(tf.float32, [None, 784])
    

    指定这个变量的类型和shape,以后再用feed的方式来输入值。

    1. 图(graph)
      如果把下面的python语句改在tf语句,该怎么写呢:
    x=3
    y=2
    z=x+y
    print(z)
    

    定义两个变量,并将两个数相加,输出结果。如果在tf中直接像上面这样写,那就错了。x,y,z分别是三个tensor对象,对象间的运算称之为操作(op), tf不会去一条条地执行各个操作,而是把所有的操作都放入到一个图(graph)中,图中的每一个结点就是一个操作。然后行将整个graph 的计算过程交给一个 TensorFlow 的Session, 此 Session可以运行整个计算过程,比起操作(operations)一条一条的执行效率高的多。
    执行代码如下:

    import tensorflow as tf
    x = tf.Variable(3)
    y = tf.Variable(5)
    z=x+y
    init = tf.initialize_all_variables()
    with tf.Session() as sess:
        sess.run(init)
        print(sess.run(z))
    

    其中sess.run()即是执行,注意要先执行变量初始化操作,再执行运算操作。
    Session需要先创建,使用完后还需要释放。因此我们使用with...as..语句,让系统自动释放。
    例子1:hello world

    import tensorflow as tf
    word=tf.constant('hello,world!')
        with tf.Session() as sess: 
        print(sess.run(word))
    

    例子2:加法和乘法

    import tensorflow as tf 
    a = tf.placeholder(tf.int16)
    b = tf.placeholder(tf.int16)
    add = tf.add(a, b)
    mul = tf.mul(a, b)
    
    with tf.Session() as sess:
        print('a+b=',sess.run(add, feed_dict={a: 2, b: 3}))
        print('a*b=',sess.run(mul, feed_dict={a: 2, b: 3}))
    

    此处使用feed_dict以字典的方式对多个变量输入值。
    例子3: 矩阵乘法

    import tensorflow as tf 
    a=tf.Variable(tf.ones([3,2]))
    b=tf.Variable(tf.ones([2,3]))
    product=tf.matmul(5*a,4*b)
    init=tf.initialize_all_variables()
    
    with tf.Session() as sess:
        sess.run(init)
        print(sess.run(product))
    

    其中

    product=tf.matmul(5*a,4*b)
    

    也可以改成

    product=tf.matmul(tf.mul(5.0,a),tf.mul(4.0,b))
    

    定义变量时,没有指定数据类型,则默认为float32,因此是5.0而不是5

    再看一个实例:

    #coding:utf-8
    import tensorflow as tf
    
    # 创建一个变量state,初始值是0,名称是counter
    state = tf.Variable(0, name='counter')
    
    # 定义常量 one
    one = tf.constant(1)
    
    # 定义加法步骤 (注: 此步并没有直接计算,再调用时才计算)
    new_value = tf.add(state, one)
    
    # 将 State 更新成 new_value
    update = tf.assign(state, new_value)
    
    
    
    init = tf.initialize_all_variables()
    
    with tf.Session() as sess:
        sess.run(init)
        print sess.run(state)
        print "第一次打印"
        for _ in range(3):
            sess.run(update)
            print(sess.run(state))
            print(sess.run(one))
    
    
    输出结果是:
    0
    第一次打印
    1
    1
    2
    1
    3
    1
    

    相关文章

      网友评论

        本文标题:Tensorflow语法基础(1)

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