一、张量的定义和变换
1.张量表示一个数值组成的数组,这个数组可能有多个维度。
说明,torch.arange(12)可以得到一个一维的(有几层中括号就是几维数组,注意是层,不是个数),一个最内层的一个中括号中的一列数值都来描述一个点的信息)、由0~11数值组成的张量。
2.可以通过张量的shape属性来访问张量的形状.
说明:输出结果的torch.Size()表示一维里有12个元素。
3.可以通过numel()来访问张量中元素的总数。(number elements)
4.使用reshape()函数改变一个张量的形状而不改变元素数量和元素值。
可以看出reshape()函数中有几个函数便改变成几维数组。
5.使用全0、全1、其他常量或者从特定分布中随机采样的数字。
6.通过特定的值来为所需张量中的每个元素赋予确定值。
说明:上例创建了一个二位的数组。第一行的元素是2,1,4,3,第二行的元素是1,2,3,4,第三行的元素是4,3,2,1.
7.常见的标准算数运算符(加、减、乘、除和求幂运算),都是按元素计算。这里还不是线性代数里的运算。
8.可以把多个张量连结在一起。
9.通过逻辑运算符构建二元张量,也是按元素值进行运算。
10.使用sum()函数堆张量中的所有元素进行求和产生一个只有一个元素的张量。
11.即使两个张量形状不同,也可以通过广播机制(broadcasting mechanism)来执行按元素操作。
说明:a是一个二维张量,第一个维度是3,第二个维度是1,b是一个二维张量,第一个维度是1,第二个维度是2,进行a+b运算时将a的第二个维度复制一份使第二个维度为2(与b一致,即a=[[0,0],[1,1],[2,2]),将b的第一个维度复制两份使第一个维度为3(与a一致,即b=[[0,1],[0,1],[0,1]]),在进行相加得结果。
二、张量中元素的访问
1.可以用-1选择最后一个元素,可以用[1:3]选择第二个和第三个元素。
2.还可以通过指定索引来将元素写入矩阵
为多个元素赋相同的值,只需要索引所有元素,然后为它们赋值。
3.一个节省内存的小细节
python中可以通过id()函数来获得 变量的编号(相当于地址)
可以看出,当使一个张量加上另一个张量赋给原来的张量时使用+=执行原地操作,不用为新结果分配内存,而使用=要为新结果分配内存。
将两个张量相加赋给另一个张量时加“[:]”也可以不用分配新内存,不加则需要。
三、转化为NumPy张量
python里最常见的其实既不是torch,也不是tensorflow,而是numpy。numpy是python里最基础的多元数组运算框架,所有框架可以很方便地从numpy进行转化。
四、将大小为1的张量转化为python标量