TensorFlow学习笔记(1)——标量、向量、矩阵、张量

22 篇文章 5 订阅
4 篇文章 4 订阅

从开始做NLP开始,不知道接触过这几个概念多少次,也不知道百度过多少次,每次都会选择性遗忘,所以这一次就写一份统一的笔记用作记录。
在这里感谢我阔耐温柔贤惠大方美丽的同桌给我分享了一份她的笔记!
在这篇文章中,我争取以一个计算机学生的视角来讲解该知识。

作为一个非数学非物理的计算机科班出身再加上数二72分的辣鸡程序员来说,我最开始以为这一坨是很深奥,很复杂的内容,尤其是在你百度张量的时候,如果不加上“计算机”作为限定语,会是这样的:
百度百科
嗯,右下角是我。

当时我还以为这是一个多么复杂,多么高深的问题,然后在我查阅了一下午资料后发现,其实对于我们这种程序员来说,这东西我感觉具体的什么物理巴拉巴拉那些都不用管(如果想看的,我会把我看过的所有内容放在最后面),最主要的是以下的内容:

如果对向量、矩阵等内容感觉还有些许不熟的同学,可以看我的线性代数的学习笔记——《线性代数的本质(1)——基底、向量、线性变换、逆阵、行列式

标量

标量(scalar),坦白地讲,标量就是个数,比如:3,5,7…然后我看了很多个资料,里面都称标量为0维张量,至于张量是什么,我们先埋个坑,下面再讲。

我不知道会不会有人和我一样根据向量来推导标量,反正在最开始我认为向量是有方向的,那么标量会不会有方向,后来得出一个结论,标量是个零维的东西,即一个点,那么一个点怎么可能会有方向呢?比如下图:
标量

用代码来看就是:

import numpy as np

scalar = np.array(2)
print("scalar:", scalar)
print("A scalar is of rank %d" % scalar.ndim)

运行结果如下:

scalar: 2
A scalar is of rank 0

向量

向量(vector),也称为矢量,如果对线代了解,或者看过我写的那个向量介绍的笔记的话,甚至你回忆你的高中知识,都可以想到,向量在空间中就是一个有方向的线段。但是我们以一个计算机学生的视角来看待这个问题:

向量我们应该从最开始学习代码就遇到过了,即一维数组,比如 [ 1 , 2 ] T [1, 2]^T [1,2]T。假设我们以房价和面积的问题来说(我随意设的,莫当真),我们有以下数据:

面积房价
88100
90123
96114
100100

于是我们可以获得4个向量: [ 88 , 100 ] T [88,100]^T [88,100]T [ 90 , 123 ] T [90,123]^T [90,123]T [ 96 , 114 ] T [96,114]^T [96,114]T [ 100 , 100 ] T [100,100]^T [100,100]T,如果我们还在用数学或者物理那样表达的话会是这样的:
向量(数学)表达
So horrible……我估计大家这样做极大似然人都会是满头大汉。所以在我们程序员的视角中,向量是这样的:
向量(计算机)表达
这样是不是一下豁然开朗,反手就想来一个 ∣ ∣ y ˉ − y ∣ ∣ 2 ||\bar{y}-y||^2 yˉy2

那么向量的方向又怎样理解呢?我的理解是越向右走,面积越大;越向上走,房价越高,实际上这个线段的方向是依旧存在的,因为与原点之间的斜率 y x \frac{y}{x} xy始终表达的是随着面积增长房价的变化程度。

同理,向量也称作是一维张量,用代码表达为:

vector = np.array([1, 2])
print("vector:", vector)
print("A vector is of rank %d" % vector.ndim)

结果是:

vector: [1 2]
A vector is of rank 1

矩阵

矩阵(matrix),结合上上面的内容以及多维数组的概念,那么大家就可以很快理解了,矩阵无非就是n个m维的向量构建起来的一个平面,如下图:
矩阵
多个向量构成了一个平面,也是一个二维张量。其实上面那个图我们也可以把所有的向量组合起来,也可以构成一个矩阵,即:
[ [ 88 , 100 ] T , [ 90 , 123 ] T , [ 96 , 114 ] T , [ 100 , 100 ] T ] [[88,100]^T,[90,123]^T,[96,114]^T,[100,100]^T] [[88,100]T[90,123]T[96,114]T[100,100]T]

用代码表示为:

matrix = np.array([[1, 2], [3, 4]])
print("matrix:\n", matrix)
print("A matrix is of rank %d" % matrix.ndim)

结果为:

matrix:
 [[1 2]
 [3 4]]
A matrix is of rank 2

张量

好的,我们终于来到了令人激动的张量(tensor)。张量的定义为:一个容器,存储N维数据及其线性运算。通常来说,张量指的是维度大于等于3的空间。

我们就以上面的内容来看,三维、四维、五维张量就是一个一个堆砌起来的,如下:
张量
嗯……但这也不是我们程序员想要的对吧……

所以我们就又用代码来看:

tensor = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]], [[9, 10], [11, 12]]])
print("tensor:\n", tensor)
print("A tensor is of rank %d" % tensor.ndim)

得到的结果为:

tensor:
 [[[ 1  2]
  [ 3  4]]

 [[ 5  6]
  [ 7  8]]

 [[ 9 10]
  [11 12]]]
A tensor is of rank 3

总结

其实上面一半科普,一半用代码说明,但是我们就从最简单的代码来说,标量就是一个数,向量就是一维数组,矩阵就是二维数组,张量(普遍意义上)就是多维数组。相应的代码就是框框的数量。

或者用另外一个说法来形容,标量就是一个数一个向量表达的就是由两个特征值构成的一个点,即横纵坐标都是某一个特征。而矩阵就是三个特征值构成的点张量就是由更多的特征值构成的点

注:以下的栗子是我在开组会的时候自己勾勾画画想的,不一定是对的,如果有错误,欢迎指正!

我们拿西瓜来举栗子,假设我们的特征为[声音, 色泽],当我们有一组特征值 [ 1 , 1 ] [1, 1] [1,1]时,在坐标轴上如下:
一组向量
而当我们有多组特征值,构成了一个样本,假设为 [ 1 , 1 ] , [ 2 , 2 ] , [ 3 , 3 ] [1, 1],[2, 2], [3, 3] [1,1],[2,2],[3,3]时,就构成了一个矩阵: [ [ 1 , 1 ] , [ 2 , 2 ] , [ 3 , 3 ] ] [[1, 1], [2, 2], [3, 3]] [[1,1],[2,2],[3,3]],在坐标轴如下:
一组矩阵

注:如果要增加一类特征,比如大小,那么这是增加特征维度,但是对于代码的表达始终是 [ [ 1 , 1 , 1 ] , [ 2 , 2 , 2 ] , [ 3 , 3 , 3 ] ] [[1, 1, 1], [2, 2, 2], [3, 3, 3]] [[1,1,1],[2,2,2],[3,3,3]],还是脱离不出矩阵的范围。

而当我们有多个样本后,就构成了一个张量,比如两个样本,分别为 [ [ 1 , 1 ] , [ 2 , 2 ] , [ 3 , 3 ] ] [[1, 1],[2, 2], [3, 3]] [[1,1],[2,2],[3,3]] [ [ 1 , 2 ] , [ 2 , 1 ] , [ 3 , 3 ] ] [[1, 2], [2, 1], [3, 3]] [[1,2],[2,1],[3,3]],那么张量为: [ [ [ 1 , 1 ] , [ 2 , 2 ] , [ 3 , 3 ] ] , [ [ 1 , 2 ] , [ 2 , 1 ] , [ 3 , 3 ] ] ] [[[1, 1],[2, 2], [3, 3]], [[1, 2], [2, 1], [3, 3]]] [[[1,1],[2,2],[3,3]],[[1,2],[2,1],[3,3]]],表达在坐标轴上为:
一组张量

好的,现在有tensor了,接下来就开始flow了!

参考

[1]科普中国.标量[EB/OL].https://baike.baidu.com/item/%E6%A0%87%E9%87%8F/1530843?fr=aladdin,2019-12-26.
[2]标量,向量,矩阵与张量.城市中迷途小书童[EB/OL].https://www.jianshu.com/p/abe7515c6c7f,2018-8-27.
[3]hpulfc.机器学习中的张量(通俗优雅的理解)[EB/OL].https://blog.csdn.net/hpulfc/article/details/80886117?utm_medium=distribute.pc_feed_404.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_feed_404.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecas,2018-7-2.
[4]White Pillow.怎么通俗地理解张量?[EB/OL].https://www.zhihu.com/question/23720923/answer/32739132,2015-6-7.
[5]景略集智.什么是张量 (tensor)?[EB/OL].https://www.zhihu.com/question/20695804/answer/455312995,2018-7-29.
[6]包遵信.什么是张量 (tensor)?[EB/OL].https://www.zhihu.com/question/20695804,2016-9-11.

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值