这个可以生成一个张量,传递的参数是list
这个可以生成一个张量,传递的参数可以是list或大小(这个一般按照pytorch默认的数据类型来生成)
这个可以生成一个浮点类型的张量,其中传递的参数可以是列表,也可以是维度值
这个可以生成一个整型类型的张量,其中传递的参数可以是列表,也可以是维度值
这个函数可以生成数据为浮点类型且维度指定的随机张量,与numpy中的numpy.rand()
类似。生成的数范围在[0,1]之间,传递的参数是张量大小
这个函数可以生成数据为浮点类型且维度指定的随机张量,与numpy中的numpy.rand()
类似。生成的数取值满足均值为0、方差为1的正态分布
这个函数可以生成数据为整型类型且维度指定的随机张量,与numpy中的numpy.rand()
类似。生成的数范围在[0,1]之间,传递的参数是最小值,最大值,张量大小
这个函数可以生成数据为浮点类型且定义范围的张量,传递3个参数,分别为范围的起始值,范围的结束值,每个数据之间的间隔
这个函数可以生成有一定规律的张量,传递3个参数,起始值,结束值,间隔
这个函数可以把所有的元素赋值成相同的值,传递两个参数,list(张量大小)和要赋的值
这个函数可以根据张量的均值和方差生成张量
这个可以生成数据类型为浮点且维度指定的张量,且所有元素都是0,即可以生成一个零张量。
这个可以生成数据类型为浮点且维度指定的张量,且所有元素都是1。
这个可以生成一个数据类型为浮点且主对角线为1的张量,即生成一个单位张量
这个可以生成按一定比例划分连续的一个张量,传递的参数有起始值,结束值,分成几份。(其实就是按照线性划分)
这个是按照对数空间上进行划分,与上面一个相同
这个是可以把张量进行打乱,进行一个shuffle的操作。传递的参数是维度,要打乱第几维度
平时我们传入神经网络的图片一般是四维的
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,田宗若,《张量分析》 ,西北大学出版社
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。