Tensorflow快餐教程(3)- 向量

作者: 阿里云云栖号 | 来源:发表于2018-04-24 16:49 被阅读175次

    摘要: Tensorflow向量操作

    向量

    向量在编程语言中就是最常用的一维数组。

    二维数组叫做矩阵,三维以上叫做张量。

    向量虽然简单,高效,且容易理解。但是与操作0维的标量数据毕竟还是不同的。比如向量经常用于表示一个序列,生成序列像标量一样一个一个手工写就不划算了。当然可以用循环来写。在向量中这样还好,如果是在矩阵或者是张量中就强烈建议不要用循环来做了。系统提供的函数一般都是经过高度优化的,而且可以使用GPU资源来进行加速。

    我们一方面尽可能地多使用系统的函数,另一方面也不要迷信它们,代码优化是一个实践的过程,可以实际比较测量一下。

    快速生成向量的方法

    range函数生成等差数列

    tf.range函数用来快速生成一个等差数列。相当于之前我们讲numpy时的np.arange函数。

    原型:

    tf.range(start, limit, delta=1, dtype=None, name='range')

    例:

    linspace生成浮点等差数组

    tf.linspace与tf.range的区别在于,数据类型不同。

    tf.lin_space(   

    start,   

    stop,   

    num,   

    name=None

    )

    其中,start和stop必须是浮点数,且类型必须相同。num必须是整数。

    例:

    拼瓷砖

    就是将一段向量重复若干次。

    向量操作

    将向量反序

    可以使用tf.reverse函数。

    原型:

    tf.reverse(   

    tensor,   

    axis,   

    name=None

    )

    tensor是向量,axis轴对于向量不重要,给个[-1]就可以了。折腾轴是张量时间的事情,暂时还用不到。

    >>> a2 = tf.linspace(1.0,10.0,4)

    >>> a3 = tf.reverse(a2,[-1])

    >>> sess.run(a3)

    array([10.,7.,4.,1.], dtype=float32)

    切片

    切片也是向量的常用操作之一,就是取数组的一部分。

    例:

    >>> a5 = tf.linspace(1.0,100.0,10)

    >>> sess.run(a5)

    array([1.,12.,23.,34.,45.,56.,67.,78.,89.,100.],     

    dtype=float32)

    >>> a6 = tf.slice(a5, [2],[4])

    >>> sess.run(a6)

    array([23.,34.,45.,56.], dtype=float32)

    将来处理张量时,我们从一个矩阵切一块,或从一个张量中切一块,就好玩得多了。但是原理跟向量上是一样的。

    连接

    tf.concat也是需要给定轴信息的。对于两个线性的向量,我们给0或者-1就好。

    向量计算

    向量加减法

    同样长度的向量之间可以进行加减操作。

    例:

    向量乘除标量

    向量乘除标量也非常好理解,就是针对向量中的每个数都做乘除法。

    例:

    广播运算

    如果针对向量和标量进行加减运算,也是会对向量中的每个数进行加减运算。这种操作称为广播操作。

    例:

    小结

    从上面我们学习的函数我们可以看到,与普通语言中提供的函数多是为一维数组操作不同,Tensorflow中的切片、拼接等操作也是基于张量的。

    当我们后面学到张量遇到困难时,不妨回来看下这一节。不管后面张量多么复杂,其实也只是从一维向二维和多维推广而己。

    详情请阅读原文

    相关文章

      网友评论

        本文标题:Tensorflow快餐教程(3)- 向量

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