专栏首页python深度学习张量与张量网络背景和意义-基础知识
原创

张量与张量网络背景和意义-基础知识

张量(Tensor)可以理解为广义的矩阵,其主要特点在于将数字化的矩阵用图形化的方式来表示,这就使得我们可以将一个大型的矩阵运算抽象化成一个具有良好性质的张量图。由一个个张量所共同构成的运算网络图,就称为张量网络(Tensor Network)。让我们用几个常用的图来看看张量网络大概长什么样子(下图转载自参考链接1):

上面这个图从左到右分别表示:一阶张量、二阶张量以及三阶张量,我们可以看出,一个张量的阶数在图像化的表示中被抽象称为了张量的的数量,而中间的方形或者圆形则表示张量本身。实际上,一阶张量代表的一个矢量,比如我们平时用python所定义的一个数组变量:

1
2
3
x = [1, 0]
y = [0, 1, 0]
z = [1, 2, 3, 4]

那么这里的x,y,z都是一阶的张量。而二阶张量所表示的含义是一个二维的矩阵,如我们常见的python多维数组:

1
2
M = [[1, -1], [-1, 1]]
N = [[1, 3], [2, 4], [5, 6]]

这里定义的M, N都是二阶的张量。通过观察这些示例中的一阶和二阶的张量我们可以得到一个规律:能够用形如var[i]的形式读取和遍历var中的标量元素的就可以称之为一阶张量,能够用形如var[i][j]的形式读取和遍历var中的标量元素的可以称之为二阶张量。显然,属于几阶的张量,跟张量内所包含的元素个数是无关的。那么根据这个客观规律,我们可以再推广到零阶张量和更加高阶的张量:

1
2
3
pi = 3.14
P = [[[1]]]
Q = [[[1, 1, 1], [1, 1, 1], [1, 1, 1]]]

在上述的python变量定义中,pi就是一个零阶的张量,零阶张量实际上就等同于一个标量,而P, Q都是三阶的张量。需要注意的是,虽然张量P只有一个元素,但是如果我们需要读取这个标量元素,我们必须使用如下的python指令来执行:

print (P[0][0][0])

因此P也是一个有三条腿的张量。在使用张量的形式来表示单个矩阵的同时,我们需要考虑如果有多个矩阵的乘法运算,我们该如何表示?我们先以两种形式的python矩阵运算来说明张量计算的表示方法:

1
2
3
4
5
6
7
import numpy as np
M = np.random.rand(2, 2)
v = np.random.rand(2)
w = np.dot(M, v)
print (M)
print (v)
print (w)

这一串python代码表示的计算过程为:w2×1=M2×2⋅v2×1w2×1=M2×2⋅v2×1,为了不失广泛有效性,这里使用随机的张量来进行计算,这里的M表示二阶张量,v,w表示一阶张量。如果从矩阵运算的角度来理解,实际上就是一个2×22×2的矩阵乘以一个2×12×1的矢量,并且得到了一个新的2×12×1的矢量。计算所得到的结果如下所示:

1
2
3
4
[[0.09660039 0.55849787]
 [0.93007524 0.32329559]]
[0.74966152 0.59573188]
[0.40513259 0.88983912]

同时我们也考虑下另外一种张量运算的场景,一个高阶的张量与另外一个高阶的张量进行运算:

1
2
3
4
5
6
7
import numpy as np
A = np.random.rand(1, 2, 2, 2)
B = np.random.rand(2, 2, 2)
C = np.einsum('ijkl,klm->ijm', A, B)
print ('A:', A)
print ('B:', B)
print ('C:', C)

这一串python代码表示的计算过程为:C1×2×2=A1×2×2×2⋅B2×2×2C1×2×2=A1×2×2×2⋅B2×2×2,由于这里的多维张量运算已经不能使用普通的numpy.dot来处理,因此我们还是适用了专业的张量计算函数numpy.einsum来进行处理,计算结果如下:

1
2
3
4
5
6
7
8
9
10
11
12
A: [[[[0.85939221 0.43684494]
   [0.71895754 0.31222944]]

  [[0.49276976 0.13639093]
   [0.04176578 0.14400289]]]]
B: [[[0.21157005 0.58052674]
  [0.59166167 0.21243451]]

 [[0.11420572 0.98995349]
  [0.1145634  0.97101076]]]
C: [[[0.5581652  1.60661377]
  [0.20621996 0.49621469]]]

以上的两个案例,从张量理论的角度来理解,相当于分别将张量w和张量C表示成了多个张量组合运算的结果。由多个张量构成的组合运算,我们可以使用张量网络来表示:

上图所示的(a)(a)和(b)(b)就分别表示张量w和张量C的张量网络图。而这个将张量网络的所有张量进行计算,最终得到一个或一系列的新的张量的矩阵乘加过程,我们也称之为张量缩并,英文叫Tensor Contraction

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • ECCV 2018 | 旷视科技提出统一感知解析网络UPerNet,优化场景理解

    论文名称:《Unified Perceptual Parsing for Scene Understanding》

    机器之心
  • 福利赠书!《图解深度学习与神经网络:从张量到TensorFlow实现》

    作为一个三观奇正,有志于分享的公众号,奇点在每周五都有“赠书福利”环节,把更多的好书介绍给读者。关注并转发本篇文章,然后将截图发至后台就可以参与抽奖,每周一奇点...

    刀刀老高
  • 模式识别面临的挑战

    2017年11月25日,由模式识别国家重点实验室、中国自动化学会模式识别与机器智能专委会、中国人工智能学会模式识别专委会联合主办的模式识别与人工智能学科前沿研讨...

    企鹅号小编
  • 学界 | Adobe提出深度抠图:利用卷积网络分离图像前景与背景

    选自arXiv 机器之心编译 参与:蒋思源 抠图,一直是一件体力活,它需要大量的操作与时间。而传统抠图算法主要是以色彩为特征分离前景与背景,并在小数据集上完成,...

    机器之心
  • 云从科技资深算法研究员:详解跨镜追踪(ReID)技术实现及难点 | 公开课笔记

    用户1737318
  • 告别RNN,迎来TCN!将深度学习应用于股市预测

    金融时间序列(FTS)建模历史悠久,20 世纪 70 年代初它首次革新了算法交易。FTS 分析包括两类:基础分析和技术分析。但这两种分析方法都受到有效市场假说(...

    计算机视觉联盟
  • 输入两张“怪异”图像,VGG、Inception、ResNet集体翻车,经典图像分类模型有多脆弱?

    VGG是一款经典图像分类算法。图像分类是计算机视觉技术的基础任务,比如给定一张图像,判断它是猫、狗、飞机,还是建筑。

    AI科技评论
  • 自然语言的理解和连续表达 | 微软演讲PPT终章

    微软研究院在IJCAI2016的Tutorial上讲述了自己将深度学习、深度神经网络应用于不同场景的情况,之前第二部分提到了深度学习在统计机器翻译和会话中的应用...

    AI科技评论
  • 自然场景文本检测识别技术综述

    番外 青蛇: 姐, 图像文本检测和识别领域现在的研究热点是什么? 白蛇: 白纸黑字的扫描文档识别技术已经很成熟,而自然场景图像文本识别的效果还不理想。倾斜字、艺...

    SIGAI学习与实践平台

扫码关注云+社区

领取腾讯云代金券