概念

0维张量/标量 标量是一个数字

1维张量/向量 1维张量称为“向量”。

2维张量 2维张量称为矩阵

3维张量 公用数据存储在张量 时间序列数据 股价 文本数据 彩色图片(RGB)
现有的深度学习系统大多都是基于张量代数(tensor algebra)设计的,但张量代数不仅仅用于深度学习。
张量

TensorFlow中的中心数据单位是张量。张量由一组成形为任意数量的数组的原始值组成。张量的等级是其维数。以下是张量的一些例子:

3 # a rank 0 tensor; this is a scalar with shape []
[1. ,2., 3.] # a rank 1 tensor; this is a vector with shape [3]
[[1., 2., 3.], [4., 5., 6.]] # a rank 2 tensor; a matrix with shape [2, 3]
[[[1., 2., 3.]], [[7., 8., 9.]]] # a rank 3 tensor with shape [2, 1, 3]

张量,或tensor,是本文档会经常出现的一个词汇,在此稍作解释。

使用这个词汇的目的是为了表述统一,张量可以看作是向量、矩阵的自然推广,我们用张量来表示广泛的数据类型。

规模最小的张量是0阶张量,即标量,也就是一个数。

当我们把一些数有序的排列起来,就形成了1阶张量,也就是一个向量

如果我们继续把一组向量有序的排列起来,就形成了2阶张量,也就是一个矩阵

把矩阵摞起来,就是3阶张量,我们可以称为一个立方体,具有3个颜色通道的彩色图片就是一个这样的立方体

把立方体摞起来,好吧这次我们真的没有给它起别名了,就叫4阶张量了,不要去试图想像4阶张量是什么样子,它就是个数学上的概念。

张量的阶数有时候也称为维度,或者轴,轴这个词翻译自英文axis。譬如一个矩阵[[1,2],[3,4]],是一个2阶张量,有两个维度或轴,沿着第0个轴(为了与python的计数方式一致,本文档维度和轴从0算起)你看到的是[1,2],[3,4]两个向量,沿着第1个轴你看到的是[1,3],[2,4]两个向量。
要理解“沿着某个轴”是什么意思,不妨试着运行一下下面的代码:

import numpy as np

a = np.array([[1,2],[3,4]])
sum0 = np.sum(a, axis=0)
sum1 = np.sum(a, axis=1)

print a
print sum0
print sum1

深度学习中的tensor
如果说计算是有传统的,那么使用线性代数的数值计算就是其中最重要的一支。像 LINPACK 和 LAPACK 这样的包已经是非常老的了,但是在今天它们任然非常强大。其核心:线性代数由非常简单且常规的运算构成,它们在一维或二维数组(称为向量或矩阵)上进行重复的乘法和加法运算。同时线性代数适用范围异常广泛,从计算机游戏中的图像渲染到精密仪器设计等许多不同的问题都可以解决或近似计算。

关键的线性代数运算:在计算机上使用的最基础的线性代数运算是两个向量的点积(dot product)。这种点积仅仅是两个向量中相关元素的乘积和。一个矩阵和一个向量的积可以被视为该矩阵和向量行(row)的点积,两个矩阵的乘积可以被视为一个矩阵和另一个矩阵的每一列(column)进行的矩阵-向量乘积的和。此外,再配上用一个值对所有元素进行逐一的加法和乘法,就可以构造出所需的线性代数运算机器。

计算机之所以可以极快地求出用线性代数编写的程序值,部分原因是线性代数具有规律性。另一个原因是它们可以大量地被并行处理。完全就潜在性能而言,从早期的 Cray-1到今天的 GPU 计算机,性能增长了超过 30000 倍。当考虑用大量 GPU 处理集群数据时,其潜在的性能,在极小成本下,比曾经世上最快速的计算机大约高出一百万倍。

要想充分利用新的处理器,就要让运算越来越抽象。Cray-1 和它向量化的继承者需要其运行程序能够使用向量运算(如点积)才能发挥出硬件的全部性能。后来的机器要求要就矩阵-向量运算或矩阵-矩阵运算来将算法形式化,从而方可尽可能地发挥硬件的价值。

但是到现在我们没有任何超越矩阵-矩阵运算的办法,换句话说:我们对线性代数的使用已达极限。

但是,完全必要把自己限制在线性代数上。长期以来,人们都知道在数学抽象的海洋中存在着比矩阵还要大的鱼,这其中一个候选就是张量(tensor)。张量是广义相对论重要的数学基础,此外它对于物理学的其它分支来说也具有基础性的地位。那么如同数学的矩阵和向量概念可被简化成我们在计算机中使用的数组一样,我们是否可以将张量也简化和表征成多维数组和一些相关的运算呢?很不幸,事情没有那么简单,这其中的主要原因是不存在一个显而易见且简单的(如在矩阵和向量上类似的)可在张量上进行的一系列运算。

然而,也有好消息。虽然我们不能对张量使用仅几个运算。但是我们可以在张量上写下一套运算的pattern。不过,这还不不够,因为根据这些模式编写的程序不能像它们写的那样被充分高效地执行。另外:那些效率低下但是编写简单的程序可以被自动转换成可非常高效执行的程序。

更赞的是,这种转换可以无需构建一门新编程语言就能实现。只需要一个简单的技巧就可以了,当我们在 TensorFlow 中写下如下代码时:

v1 = tf.constant(3.0)

v2 = tf.constant(4.0)

v3 = tf.add(node1, node2)

系统将建立一个像图 1 中显示的数据结构:

图 1:上方的代码被转译成一个可被重建的数据结构,而且它会被转成机器可执行的形式。将代码转译成用户可见的数据结构可让我们所编写的程序能被重写从而更高效地执行,或者它也可以计算出一个导数,从而使高级优化器可被使用。

该数据结构不会在上面我们展示的程序中实际执行。因此,TensorFlow 才有机会在我们实际运行它之前,将数据结构重写成更有效的代码。这也许会牵涉到我们想让计算机处理的小型或大型结构。它也可生成对我们使用的计算机 CPU、使用的集群、或任何手边可用的 GPU 设备实际可执行的代码。因此,我们可以编写非常简单但可实现令人意想不到结果的程序。

TensorFlow 和像它一样的系统采用的完全是描述机器学习架构(如深度神经网络)的程序,然后调整那个架构的参数以最小化一些误差值。它们通过创建一个表征我们程序的数据结构,和一个表征相对于我们模型所有参数误差值梯度的数据结构来实现这一点。这个梯度函数的存在使得优化变得更加容易。

但是,虽然你可以使用 TensorFlow 或 Caffe 或任何其它基本上同样工作模式的架构来写程序,不过你写的程序不一定要去优化机器学习函数。如果你写的程序使用了由你选择的package提供的张量标注,那它就可以优化所有类型的程序。自动微分和最先进的优化器以及对高效 GPU 代码的编译对你仍然有利。

例子:图二给出了一个家庭能耗的简单模型。

图 二:该图显示了一间房子的日常能耗情况(圆圈),横轴代表了温度(华氏度)。能耗的一个分段线性模型叠加在了能耗具体数据上。模型的参数按理来说会形成一个矩阵,但是当我们要处理上百万个模型时,我们便可以用到张量。

该图显示了一间房子的能耗使用情况,并对此进行建模。需要写代码来分别对数百万间房子的能耗情况进行建模。如果使用 TensorFlow,我们可以立即为所有这些房子建立模型,并且我们可以使用比之前得到这个模型更有效的优化器。就可以立即对数百万个房间的模型进行优化,而且其效率比之前我们原始的程序要高得多。理论上我们可以手动优化代码,并且可以有人工推导的导数函数。不过完成这项工作所需要的时间,以及更重要的,调试花费的时间会让笔者无法在有限时间里建立这个模型。

这个例子说明了一个基于张量的计算系统如 TensorFlow(或 Caffe 或 Theano 或 MXNet 等等)是可以被用于和深度学习非常不同的优化问题的。

张量/tensor--详解相关推荐

  1. 2021 PyTorch官方实战教程(一)Tensor 详解

    点击上方"AI算法与图像处理",选择加"星标"或"置顶"重磅干货,第一时间送达 这个系列时pytorch官方实战教程,后续会继续更新.. 一 ...

  2. torch.randn()参数size与输出张量形状详解

    torch.randn()参数size与输出张量形状详解 torch.randn(*size, *, out=None, dtype=None, layout=torch.strided, devic ...

  3. 【PyTorch系例】torch.Tensor详解和常用操作

    学习教材: 动手学深度学习 PYTORCH 版(DEMO) (https://github.com/ShusenTang/Dive-into-DL-PyTorch) PDF 制作by [Marcus ...

  4. Pytorch张量操作详解

    文章目录 一.前置条件 二.操作 1.指定长度的顺序向量[arange] 2.查看元素总数[numel] 3.改变张量形状[reshape] 4.查看张量形状[shape] 5.全0张量[zeros] ...

  5. 张量详解(Tensor)

    张量--->blog 查看全文 http://www.taodudu.cc/news/show-6966487.html 相关文章: Tensorflow:张量(Tensor)的创建及其基础操作 ...

  6. python输入参数改变图形_Python基于Tensor FLow的图像处理操作详解

    本文实例讲述了Python基于Tensor FLow的图像处理操作.分享给大家供大家参考,具体如下: 在对图像进行深度学习时,有时可能图片的数量不足,或者希望网络进行更多的学习,这时可以对现有的图片数 ...

  7. Tensorflow 2.x源码详解之开宗明义:基本介绍和张量(万文多图)

      大家好,我是爱编程的喵喵.双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中.从事机器学习以及相关的前后端开发工作.曾在阿里云.科大讯飞.CCF等比赛获得多次Top名次.现 ...

  8. python开方运算符_Pytorch Tensor基本数学运算详解

    1. 加法运算 示例代码: import torch # 这两个Tensor加减乘除会对b自动进行Broadcasting a = torch.rand(3, 4) b = torch.rand(4) ...

  9. SolidWorks质量特性详解(惯性张量、转动惯量、惯性主轴)

    SolidWorks质量特性详解(惯性张量.转动惯量.惯性主轴) 转载自:SolidWorks质量特性详解(惯性张量.转动惯量.惯性主轴) - CAD2D3D.com 目录:技术教程   作者:CAD ...

  10. 【小白学PyTorch】10.pytorch常见运算详解

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 <<小白学PyTorch>> 参考目录: ...

最新文章

  1. 【swjtu】数据结构实验4_基于改进KMP算法的子串查找与替换
  2. codevs 1376 帕秋莉•诺蕾姬
  3. PAT甲级1106 Lowest Price in Supply Chain:[C++题解]树、结点到根结点的距离、树形dp、记忆化搜索
  4. c++局部对象是什么_小白学Web前端难点是什么 JS进阶知识点有哪些
  5. centos挂载u盘只读_完美解决linux下U盘文件只读的问题
  6. md5与des算法有何不同_到底AI芯片和传统芯片有何区别?
  7. 试图加载格式不正确的程序_好程序员大数据学习路线之hive存储格式
  8. Oracle 数据文件(Datafile ) 大小 限制 说明
  9. orangepi香橙派安装VNC Viewer远程桌面
  10. 112 Python程序中的进程操作-开启多进程(multiprocess.Process)
  11. Revit二次开发——导出OBJ格式插件
  12. java 时间 转化成数字_将时间转化为数字 java
  13. 用c++编写别踩白块儿小游戏
  14. 为什么直到YOY小黄仓的出现,我们的消费积分才能最大利用呢?
  15. spyder python使用技巧大全_spyder常用功能
  16. 超详细的java基础知识学习(java SE、javaEE)笔记 核心重点!
  17. 【Web前端】html+css+javascript
  18. Java高级工程师面试题目汇集
  19. 针对HFS 2.3漏洞进行渗透测试提权(HFS:HttpFileServer)
  20. 软件测试--BA/PM 傻傻分不清楚?

热门文章

  1. Manjaro下安装VirtualBox
  2. Android开源库
  3. socket.io插件调用的demo
  4. [mysql]三种方法为root账户指定密码
  5. php 抽象类 静态 单体设计模式
  6. Bootstrap+angularjs+MVC3+分页技术+角色权限验证系统
  7. 安装hive操作参考视频
  8. 关系型数据库知识小结
  9. (转)OAuth 2.0的设计思路
  10. 【Demo 0015】坐标系