pytorch函数总结
torch.tensor可以按元素([ ])计算,也可以按线性代数计算;轴0是第几行,轴1是第几列
按元素计算
连结,按轴0和轴1, 把它们端对端地叠起来形成一个更大的张量
// torch.cat((X, Y), dim=0), torch.cat((X, Y), dim=1)
逻辑运算符构建二元张量 X==Y
对张量中的所有元素进行求和,会产生一个单元素张量 X.sum()
广播机制会让行向量和列向量分别复制后再相加(广播机制让矩阵运算的形状要求不再严格)
索引和切片,可以用[-1]选择最后一个元素,可以用[1:3]选择第二个和第三个元素
// X[-1], X[1:3]
(tensor([ 8., 9., 10., 11.]),
tensor([[ 4., 5., 6., 7.],
[ 8., 9., 10., 11.]])
节省内存
运行Y = Y + X后,Python首先计算Y + X,为结果分配新的内存,然后使Y指向内存中的这个新位置。
可以使用切片表示法将操作的结果分配给先前分配的数组,例如Y[:] = ,这样可以执行原地操作,或者使用Y += X
按线性代数计算
向量
在数学表示法中,向量通常记为粗体、小写的符号 (例如x,y,z)
大量文献认为列向量是向量的默认方向,在本书中也是如此,x=[x1,x2,…,xn],x1,x2,…xn是向量的元素,向量的长度通常称为向量的维度。
向量或轴的维度被用来表示向量或轴的长度,即向量或轴的元素数量。 然而,张量的维度用来表示张量具有的轴数。 在这个意义上,张量的某个轴的维数就是这个轴的长度。
torch.arange(start,step,end)//返回的一维张量,其值介于区间 [ start , end ] ,以 step 为步长等间隔取值
torch.size()和tensor.shape
shape是一个Tensor类中的属性,因为我们用tensor函数创建张量的时候(注意tensor是一个函数,Tensor是一个类)
,用到了Tensor类,然后创建的实例就可以使用Tensor中的属性
size是Tensor从上面的类中继承来的一个方法中的一个方法
矩阵
向量将标量从零阶推广到一阶,矩阵将向量从一阶推广到二阶,矩阵,我们通常用粗体、大写字母来表示 ( X,Y,Z), 在代码中表示为具有两个轴的张量。
A = torch.arange(20).reshape(5, 4),5*4的矩阵
B=A.T,矩阵的转置,bij=aji
矩阵中的行可能对应于不同的房屋(数据样本),而列可能对应于不同的属性,尽管单个向量的默认方向是列向量,但在表示表格数据集的矩阵中, 将每个数据样本作为矩阵中的行向量更为常见,这种约定将支持常见的深度学习实践。 例如,沿着张量的最外轴,我们可以访问或遍历小批量的数据样本。
张量
张量(本小节中的“张量”指代数对象)是描述具有任意数量轴的n维数组的通用方法,向量是一阶张量,矩阵是二阶张量
X = torch.arange(24).reshape(2, 3, 4)
降维
我们可以对任意张量进行的一个有用的操作是计算其元素的和,一个与求和相关的量是平均值(mean或average)
A.sum()//size[5,4]
A_sum_axis0 = A.sum(axis=0),输入矩阵沿0轴降维以生成输出向量,因此输入轴0的维数在输出形状中消失,size[4]
A_sum_axis1 = A.sum(axis=1),通过汇总所有列的元素降维(轴1),输入轴1的维数在输出形状中消失,size[5]
非降维
沿某个轴计算A元素的累积总和, 比如axis=0(按行计算),可以调用cumsum函数。 此函数不会沿任何轴降低输入张量的维度。
点积
点积dot是相同位置的按元素乘积的和
torch.dot(x, y) = torch.sum(x * y)
向量积
在代码中使用张量表示矩阵-向量积,我们使用mv函数。 当我们为矩阵A和向量x调用torch.mv(A, x)时,会执行矩阵-向量积。 注意,A的列维数(沿轴1的长度)必须与x的维数(其长度)相同。后续章节将讲到,我们也可以使用矩阵-向量积来描述在给定前一层的值时, 求解神经网络每一层所需的复杂计算
torch.mv(A, x)
范数
线性代数中最有用的一些运算符是范数(norm)。 非正式地说,向量的范数是表示一个向量有多大。 这里考虑的大小(size)概念不涉及维度,而是分量的大小。
在深度学习中,我们经常试图解决优化问题: 最大化分配给观测数据的概率; 最小化预测和真实观测之间的距离。 用向量表示物品(如单词、产品或新闻文章),以便最小化相似项目之间的距离,最大化不同项目之间的距离。 目标,或许是深度学习算法最重要的组成部分(除了数据),通常被表达为范数。
torch.norm(u),L2范数,向量元素平方和的平方根
torch.abs(u).sum(),L1范数,向量元素的绝对值之和
torch.norm(torch.ones((4, 9))), Frobenius范数(Frobenius norm)是矩阵元素平方和的平方根