怎么理解张量?

位置不同的数据类型(CPU和GPU)

  • 其他数据类型转torch

这个可以生成一个张量,传递的参数是list

这个可以生成一个张量,传递的参数可以是list或大小(这个一般按照pytorch默认的数据类型来生成)

这个可以生成一个浮点类型的张量,其中传递的参数可以是列表,也可以是维度值

这个可以生成一个整型类型的张量,其中传递的参数可以是列表,也可以是维度值

这个函数可以生成数据为浮点类型且维度指定的随机张量,与numpy中的numpy.rand()类似。生成的数范围在 0 [0,1]之间,传递的参数是张量大小

这个函数可以生成数据为浮点类型且维度指定的随机张量,与numpy中的numpy.rand()类似。生成的数取值满足均值为0、方差为1的正态分布

这个函数可以生成数据为整型类型且维度指定的随机张量,与numpy中的numpy.rand()类似。生成的数范围在 0 [0,1]之间,传递的参数是最小值,最大值,张量大小

这个函数可以生成数据为浮点类型且定义范围的张量,传递3个参数,分别为范围的起始值,范围的结束值,每个数据之间的间隔

这个函数可以生成有一定规律的张量,传递3个参数,起始值,结束值,间隔

这个函数可以把所有的元素赋值成相同的值,传递两个参数,list(张量大小)和要赋的值

这个函数可以根据张量的均值和方差生成张量

这个可以生成数据类型为浮点且维度指定的张量,且所有元素都是0,即可以生成一个零张量

这个可以生成数据类型为浮点且维度指定的张量,且所有元素都是1。

这个可以生成一个数据类型为浮点且主对角线为1的张量,即生成一个单位张量

这个可以生成按一定比例划分连续的一个张量,传递的参数有起始值,结束值,分成几份。(其实就是按照线性划分)

这个是按照对数空间上进行划分,与上面一个相同

这个是可以把张量进行打乱,进行一个shuffle的操作。传递的参数是维度,要打乱第几维度

    这个传入一个tensor,那么他就会生成一个对应传入的tensor相同大小的一个随机矩阵,这里的可以是任意的一个随机创建tensor的API

平时我们传入神经网络的图片一般是四维的

b:batch,一批多少张图片

a.view和a.reshape的作用是一样,都是将张量的大小进行改变

注:一定要保证总的大小是不变的,也就是numel()不变,否则会造成数据的丢失

unsqeeze就是一个维度增加的操作

a.unsqueeze(0)表示在在第0个维度之前添加一个维度

传递的参数就是指在第n个维度之前添加一个维度,这个参数也可以是负数,表示从倒数第n个之后添加一个维度。

squeeze是一个维度删除的操作

squeeze不传给任何参数的时候是会把能删除的都删除了,比如有1的

理解传入神经网络的张量可以从物理意义上去理解

Expand改变了我们对于张量的理解,但没有增加数据。这个API只会在有需要的时候才会拷贝数据。且只能把某一个为1的维度进行扩展,其他不为1的维度无法扩展。

给原来的张量添加了数据,改变了理解的方式。因为这个是会拷贝数据,主动地拷贝数据。给的参数是指对应的某个维度需要拷贝的次数

对目标张量进行转置,但只能对2维张量进行转置

对目标张量的维度进行交换

}

张量Tensors表示由一个数值组成的数组,这个数组可能有多个维度。

张量中的每个值都称为张量的元素

 把三维张量画成一个立方体:

通过张量的shape属性来访问张量的形状 (沿每个轴的长度)

张量中元素的总数,即形状的所有元素乘积,可以检查它的大小(size)。 因为这里在处理的是一个向量,所以它的shape与它的size相同。

改变一个张量的形状而不改变元素数量和元素值,可以调用reshape函数

全0、全1、其他常量或者从特定分布中随机采样的数字来初始化矩阵
torch.tensor([值]) 自己制定,类C语言二维数组赋值

所有的运算都是按元素进行

四则运算、乘幂运算都可参照如下:

实质为将两个矩阵广播为一个更大的3×2

矩阵a将复制列,矩阵b将复制行,然后再按元素相加。

求幂运算---exp是高等数学里以自然常数e为底的指数函数。exp(x)表示的是e的x次方

按行连接:x行,x列,y行,y列

按列连接:x行+y行,x列+y列

对张量中的所有元素进行求和会产生一个只有一个元素的张量

}

以下文字原本是我《黎曼几何读书笔记》里的一段内容,当时在理解张量时,阅读了网上不少大侠的文章,受益良多。现将其抽出来独立成篇,希望能帮助更多的人。

张量,初次接触时会是一个比较令人费解的概念,其定义既有数学的(线性函数)、物理的(不随坐标而改变的向量集合)、计算机软件的(多维数组);还有古典的(坐标不变性)、现代的(多重线性映射);整体的(公理化定义)、分量的(基矢表示的不变量)。有点混乱哦!

总之还是数学的、现代的、整体的、公理化定义,比较能体现出张量的本质。关于这一点,知乎上郭诚的解释比较好。

张量的现代数学公理化整体性定义为:

基于个人的理解,将张量描述如下:

(1)张量是广义数量:张量是广义的数量,0阶是标量、1阶是向量、2阶是矩阵、3阶是立体矩阵、高阶是超矩阵;

(2)张量是几何对象:0阶是点、1阶是箭头、2阶是有向面积、3阶是有向体积,高阶是超有向体积。当然几何对象具有坐标不变性,它不随坐标系变化而变化;

(3)张量是线性映射:映射即是某种函数法则,也就是某种算子,张量是一个同时定义在多个线性空间上的算子,它满足多重线性运算,当输入m+n个向量,则输出一个值;

(4)张量与分量:张量的分量,即是张量在基矢上的投影。张量本身不依赖于基矢,但其分量值却依赖于基矢的选择,分量遵从协变、逆变规律;反过来看,张量是由分量张成的整体,这也许是张量一词的最初来源。

(5)张量与矩阵:张量与矩阵是两个截然不同的概念,只是某种特殊类型的张量分量可以借用矩阵来表示。例如,(0,2)型或(2,0)型二阶张量在正交基下各分量可以写成矩阵形式,但张量必须满足某种线性变换法则,而矩阵却可以仅只代表一堆数。

张量,最简单的理解是多维数组,但仅仅理解为数组远没有触及到张量的本质,张量的核心性质是多重线性。所谓多重线性,也就是张量中的每一个向量对于所有的向量都是线性的,进而说张量的每个分量对所有的分量也都是线性的。因此才会有,张量的维数等于 N^{m} (N向量基的维数、m向量的重数),例如在三维空间里N=3,两重向量m=2时,张量的维数等于 3^{2}=9 (也就是张量的分量数)。关于多重线性映射,百度文库里有一位zhangjian8204的网友上传的文章“张量分析”,讲得比较好。

张量演义:最后用非数学的语言通俗化来说,张量就是一堆向量,经过另一堆向量的线性变换,得到一堆结果向量,结果向量再通过向量的合并,最后得到一只张向量,张向量的模即是张量的值。

1,White Pillow,“怎么通俗地理解张量”,知乎网;

2,马同学,“张量专题”专题,知乎网;

3,郭诚,“什么是张量”,知乎网;

5,陈玉丽,“张量分析初步”,百度文库;

6,anhuiwk,“张量微分”,百度文库;

7,田宗若,《张量分析》 ,西北大学出版社

}

我要回帖

更多关于 两点张量 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信