目录
在深度学习中,向量扮演着重要的角色。向量是一种数据结构,可以视为标量值的列表。这些标量值被称为向量的元素或分量。当向量用于表示数据集中的样本时,它们的值具有特定的现实意义。例如,在训练模型以预测贷款违约风险时,可以将每个申请人与一个向量关联,该向量的分量与申请人的收入、工作年限、过往违约次数和其他因素相对应。
在深度学习中,输入输出向量尤其重要。输入向量是训练数据的表示形式,而输出向量则是神经网络对数据的预测结果。这些向量在自然语言处理和回归问题中也发挥了关键作用。在自然语言处理问题中,输出向量可以表示文本的情感极性、情感倾向等,用于情感分析和文本分类。在回归问题中,输出向量通常表示预测的连续值,如房价、股票价格等。
深度学习中的优秀输入输出向量的选择和处理,可以提高神经网络的训练效果和预测准确性。此外,通过使用向量,可以对数据进行降维或升维,从而更好地适应不同的模型和算法。向量的内积和外积等运算也常用于机器学习和数据分析中。
一 创建向量
1.1 创建未初始化的向量
在PyTorch中,如果你想创建一个未初始化的向量,可以使用torch.empty
构造函数来创建一个空的向量。默认情况下,创建的向量的元素是未初始化的,即它们的值是不确定的。
import torch
x=torch.empty(5,3)
print(x)
tensor([[9.6429e-39, 8.4490e-39, 8.7245e-39],
[1.1112e-38, 8.9082e-39, 9.5510e-39],
[8.7245e-39, 8.4490e-39, 1.0561e-38],
[1.0286e-38, 1.0194e-38, 1.0194e-38],
[9.0918e-39, 1.1112e-38, 9.5511e-39]])
生成了五行三列未初始化的向量
1.2 生成初始化的向量
在PyTorch中,你可以使用torch.rand
来创建初始化的向量。
import torch
x=torch.rand(5,3)
print(x)
生成了五行三列0到1的向量
tensor([[0.2591, 0.1537, 0.4286],
[0.2487, 0.1322, 0.4148],
[0.4886, 0.5728, 0.1482],
[0.9155, 0.7718, 0.1815],
[0.5859, 0.2114, 0.9942]])
1.3 指定数据类型的向量
可以使用detype指定生成向量的类型
import torch
x=torch.zeros(5,3,dtype=torch.int)
print(x)
生成的向量及类型如下图
tensor([[0, 0, 0],
[0, 0, 0],
[0, 0, 0],
[0, 0, 0],
[0, 0, 0]], dtype=torch.int32)
1.4 直接根据数据创建
import torch
x=torch.Tensor([2.2,1])
print(x)
运行结果
tensor([2.2000, 1.0000])
1.5 返回数组的大小
在PyTorch中,可以使用torch.Tensor
对象的shape
属性来获取向量的形状。shape
属性返回一个元组,表示张量的维度大小。
import torch
x=torch.Tensor([2.2,1])
print(x)
print(x.size())
print(x.shape)
返回结果如图所示
tensor([2.2000, 1.0000])
torch.Size([2])
torch.Size([2])
1.6 附其他常见操作
1.6.1 生成全0矩阵
全0矩阵是一种特殊的矩阵,其中所有元素的值均为0。它通常用于表示某些数学运算中的初始状态,或者作为一种占位符,等待将来填充具体的值。在任何操作中,全0矩阵都不会改变,因为它代表的是“无”或者“零”。如果对全0矩阵进行加、减、乘等运算,结果还是全0矩阵。
import torch
x=torch.zeros([3,4])
print(x)
1.6.2 生成全1矩阵
全1矩阵是指每个元素都为1的矩阵。这种矩阵在许多领域中都有重要的应用,例如图像处理、计算机图形学、神经网络等。在状态表示中,全1矩阵可以表示所有状态均可用的情况。
import torch
x=torch.ones([3,4])
print(x)
1.6.3 生成单位矩阵
单位矩阵是一种特殊的矩阵,它从左上角到右下角的对角线(称为主对角线)上的元素均为1,除此以外全都为0。任何矩阵乘以单位矩阵都等于其自身,单位矩阵因此在高等数学中也有广泛应用。
import torch
x=torch.eye(5)
print(x)
1.6.4 根据步长生成矩阵
起点为s,终点为e,步长为step
import torch
print(torch.arange(1,4,0.5))
生成结果
tensor([1.0000, 1.5000, 2.0000, 2.5000, 3.0000, 3.5000])
二 向量的基本运算
2.1 向量的加法
矩阵的加法运算规则是,对两个矩阵A和B,只有当它们具有相同的行数和列数时,才能进行加法运算,即A+B。矩阵加法的运算规律包括交换律和结合律。交换律是指A+B=B+A;结合律是指(A+B)+C=A+(B+C)。
2.1.1 变量直接相加
import torch
x=torch.Tensor([1,1])
y=torch.Tensor([2,2])
print(x+y)
运行结果
tensor([3., 3.])
2.1.2 利用函数
import torch
x=torch.Tensor([1,1])
y=torch.Tensor([2,2])
print(torch.add(x,y))
2.2 共用内存
import torch
x=torch.Tensor([1,1])
y=x
x+=1
print(x,y)
注意此时x,y是共用内存的,依旧是说对y进行操作,同时也对x进行了操作
观察输出结果
tensor([2., 2.]) tensor([2., 2.])
我们可以建立副本来解决这个问题
import torch
x=torch.Tensor([1,1])
y=x.clone()
x+=1
print(x,y)
此时他的输出结果为
tensor([2., 2.]) tensor([1., 1.])
2.3 改变向量的维度
import torch
x=torch.Tensor([[1,1],
[3,3],
[2,3]])
y=x.view(-1,1) #-1是指根据列自动调整行的输出
print(y.size())
可以观察到
torch.Size([6, 1])
原本2*3的矩阵转化为了6*1的矩阵
需要注意的是这仅仅只是对观察的方向进行了改变,原数组的维度并没有发生改变
2.4 输出特定的行与列
import torch
x=torch.Tensor([[1,1],
[3,3],
[2,3]])
print(x[0:3,1])
我们可以通过数组的操作访问元素
其中0:3表示输出第0到2行的元素,1表示第1列的元素
2.5 一些常用的操作
2.5.1 求矩阵的迹
矩阵的迹(Trace)是指矩阵的对角线元素之和。对于一个方阵(行数和列数相等的矩阵),迹是所有对角线元素的总和。在数学中,迹被用于许多不同的领域,包括线性代数、矩阵论、二次型和张量等。公式为
import torch
x=torch.Tensor([[1,1,3],
[3,3,2],
[2,3,4]])
trace=torch.trace(x)
print(trace)
2.5.2 求逆矩阵
在数学中,一个矩阵的逆矩阵是一个特定的矩阵,它与原矩阵相乘会得到单位矩阵。单位矩阵是一个方阵,其中对角线上的元素都是1,其他元素都是0。有
import torch
x=torch.Tensor([[1,1],
[1,2]])
print(x.inverse())
2.5.3 矩阵的乘法
矩阵乘法是一种线性代数运算,用于计算两个矩阵的乘积。设A是一个m×n矩阵,B是一个n×p矩阵,则A与B的乘积AB是一个m×p矩阵。
具体来说,矩阵乘法的操作规则如下:
- 首先,需要确认第一个矩阵的列数(column)和第二个矩阵的行数(row)相同。
- 其次,从第一个矩阵的第一个元素开始,与第二个矩阵的第一个列元素相乘,并加到一起,得到新矩阵的第一行第一列元素。
- 以此类推,可以计算新矩阵的其他元素。
import torch
x=torch.Tensor([[1,1],
[1,2]])
y=torch.Tensor([[1,2],
[3,3]])
print(x.mm(y))
2.5.4 矩阵的转置
矩阵的转置是将矩阵的行列互换,具体操作是:将矩阵A的所有元素绕着一条从第1行第1列元素出发的右下方45度的射线作镜面反转,即得到A的转置。
import torch
x=torch.Tensor([[1,1,3],
[1,2,2]])
y=x.t()
print(y)