本站源码全部测试通过,配有前台及后台演示图,绿色安全,希望能对大家有所帮助!
  • 收藏本站
  • 网站地图
  • 发布源码
  • 首 页
  • app源码
  • 小程序源码
  • VPS/云主机
  • 【Python机器学习】什么是TensorFlow 中的 Tensor 和 Flow
    时间:2017-10-23 22:47:19来源:模板之家 作者:转载大师 下载:1912 次

    内容简介

    越来越多的人在用TensorFlow,那么究竟什么是Tensor,什么是Flow ?


    总结

    一言以蔽之,Google官方对TensorFlow的介绍已经很简洁精要地描述了这两个概念。

    TensorFlow™ is an open source software library for numerical computation using data flow graphs. Nodes in the graph represent mathematical operations, while the graph edges represent the multidimensional data arrays (tensors) communicated between them.


    翻译:TensorFlow是使用数据流图(data flow graphs)进行数值计算的开源软件库。 Tensor张量意味着N维数组,Flow意味着基于数据流图的计算,TensorFlow为张量从图象的一端流动到另一端计算过程。TensorFlow是将复杂的数据结构传输至人工智能神经网中进行分析和处理过程的系统。



    什么是张量 Tensor

    张量可以理解为一个存放数据的容器。大多数情况下,这个容器保存着数字,少数情况也会保存其他格式的数据,如字符串等。

    为了方便理解,我们用Python中的NumPy数组来模拟张量。

    张量是由它具有的轴的数量来定义的,一维张量只有一根轴,以此类推。


    零维张量:即标量Scalar,一个单独的数字,比如2。

    import numpy as np

    x = np.array(2)

    print(x.ndim)  # 查看该数组的维度


    一维张量:即一维的数组Array,一维张量也称为向量Vector。

    x = np.array([1,2,3,4])


    二维张量:即矩阵Matrix,是由行和列组成的二维数据网格。

    x = np.array([[5,10,15,30,25],

                  [20,30,65,70,90],

                  [7,80,95,20,30]])

    三维张量:即将多个二维张量叠在一起。三维张量是“数据立方体”,可以不断地叠加(想象成一个不断变厚的汉堡包)

    x = np.array([[[5,10,15,30,25],

                   [20,30,65,70,90],

                   [7,80,95,20,30]]

                   [[3,0,5,0,45],

                   [12,-2,6,7,90],

                   [18,-9,95,120,30]]

                   [[17,13,25,30,15],

                   [23,36,9,7,80],

                   [1,-7,-5,22,3]]])


    四维张量~ n维张量:将上述的三维张量看成一块转头(具有长宽高3根轴),如果我们继续沿着某根轴的方向堆叠转头,那就产生了四维、五维、更高维度的张量。



    张量存储的常见数据类型

    3D张量:时间序列

    4D张量:图片

    5D张量:视频


    我们举几个例子来理解:

    股票数据

    假如我们有一天390分钟内,每分钟的微软股票的最高价、最低价和收盘价,那我们可以在两根轴上记录这些数据,是个2D张量,它的形状是(390,3)--横轴有390个格子,每个格子代表1分钟。纵轴有3个格子,分别代表最高价、最低价和收盘价3个属性。


    如果我们再加上另外4天的数据,就变成了3D张量,多了一根轴来记录日期,形状变成了(5,390,3),5表示新增的日期轴有5天。


    如果我们再加上其他10个股票的数据,就变成了4D张量,多了一根轴来记录股票名称,形状是(10,5,390,3),10表示新增的股票名称轴有10个不同的股票。


    灰度图像

    一张图像可以用每个像素点上的色彩强度来表示,比如以下这个数字,是由28*28个像素点构成,每个像素点都有一个0~255的整数值对应灰色的强度,因此可以用3D张量表示,形状是(28,28,1)--1表示该图片的颜色通道数为1。



    当然,我们真实处理数据时不可能只用1张图片,所以图像数据通常是4D张量,比如(60000,28,28,1)。60000表示图像数量的轴,这里有60000张图片。


    彩色图像

    和刚才的灰度图像唯一的不同是,彩色图像的每个像素点是由3个原色构成的(RGB-红绿蓝),因此需要3个颜色通道来表示,如下图


    因此,可以把一张彩色图像理解为一块厚度为3的3D张量,一张灰度图像理解为一块厚度为1的3D张量(其实也可以认为是个2D张量)


    有很多张图片,就相当于把很多个3D张量堆在一起,形成了4D张量。


    张量的各种操作

    张量就是多维的数组,有了张量对象后,就可以对它们做各种数学运算和处理,包括最简单的加减乘除,到卷积池化、LSTM等复杂计算。对于神经网络来说,我们的目的就是通过各种运算来使得实际结果和预期结果的误差不断缩小。


    关于卷积、池化等相关概念,可以参考我之前的文章《不懂数学也能看懂的卷积神经网络》。



    什么是 Flow

    有了张量和张量的操作后,下一步就是把各个张量对象和操作组合起来。而数据流图,就是帮助定义各个操作之间应该如何执行(并行/顺次),如何协同各种不同的底层设备,以及如何避免各种类型的冗余操作等问题。在TensorFlow中,Flow即表示基于数据流图的计算任务。比如下图的一个前馈神经网络:


    从最左侧的输入x到最右侧的输出y,所有的计算形成了一个系列的计算任务,即一个flow。

    重复这个flow,各个节点的权重和偏置项得以不断调整,最终得到我们需要的模型。


    最后,这段对于计算图在深度学习框架中作用的诠释写的很到位,引用一下

    通常来说,脚本语言编写方便但执行缓慢,低级语言则正好相反,因此业界逐渐形成了这样的一种开发框架:前端用Python等脚本语言建模,后端用C++等低级语言执行(这里低级是就应用层而言),以此综合了两者的优点。这种开发框架大大降低了传统框架做跨设备计算时的代码耦合度,也避免了每次后端变动都需要修改前端的维护开销。而这里,在前端和后端之间起到关键耦合作用的就是计算图。




    参考文献

    https://hackernoon.com/learning-ai-if-you-suck-at-math-p4-tensors-illustrated-with-cats-27f0002c9b32

    https://mp.weixin.qq.com/s?__biz=MzI5NTIxNTg0OA==&mid=2247485211&idx=2&sn=0520c5b0dc54096eaae271a8864baf61&chksm=ec57b09cdb20398a2b2bd5ed670be6e93bf9ea9d4aaa659fbf3ec9b13f95ba1b30363c89626e&mpshare=1&scene=1&srcid=0121bM8xtsO6akyb3tfzZZaV#rd




    投诉
    转载请注明来源:【Python机器学习】什么是TensorFlow 中的 Tensor 和 Flow
    本文永久链接地址:bencandy.php?fid=31&id=1345
    本文标签:

    版权声明:
    —— 本文内容由互联网用户自发贡献, 本站不拥有所有权, 不承担相关法律责任, 如果发现本站有涉嫌抄袭的内容, 欢迎发送邮件至 :
    —— 1034252225@qq.com 举报, 并提供相关证据, 一经查实, 本站将立刻删除涉嫌侵权内容。

    QQ在线客服

    服务热线

    织梦建站咨询