Pytorch中的张量
Pythorch操作的基本对象是Tensor,即多维矩阵。如何在pythorch中创建一个Tensor呢?
torch.rand(X,Y) #生成X行Y列的随机矩阵
torch.randn(X,Y)#生成X行Y列的服从正态分布的随机矩阵
torch.zeros(X,Y)
#生成X行Y列的全零矩阵,把zeros改成ones就是全1矩阵;还可以(X,Y,Z)就是一个三维矩阵
torch.tensor()#创建一个tensor,下图的dtype是设置数据类型
x.type()#查看数据类型
x.type(torch.int64)#将数据类型变为64位整型

将numpy中的ndarray与Pytorch中的Tensor进行相互转换
a=torch.from_numpy(b)#将原本是numpy类型的b转换成Tensor类型
a.numpy() #将Tensor类型的a转换成numpy类型
张量之间的运算
#张量相加
x1=torch.rand(2,3)
x2=torch.rand(2,3) #生成两个两行三列的x1,x2张量(矩阵)
x1+x2 #矩阵中的对应元素相加
x1+3 #矩阵中的每个元素都加3
torch.matmul(x1,x2)#矩阵乘法,等价于x1x2,与普通x1x2不同的是,这是两个tensor的乘法,即矩阵相乘
(x1-x2).pow(z) #x1-x2的z次方
#张量的shape进行转换
x1.view(3,2**)**#类似于numpy中的reshape操作,将原本是两行三列的tensor转换为三行两列

x1.view(-1,1) #-1是自动计算,1是展平,即深度学习中的flatten操作
x1.mean() #对矩阵求均值,得到一个均值,但本质上还是一个矩阵,不过该矩阵就一个值
x1.sum() #对矩阵求和,得到一个和值,但本质上还是一个矩阵,只不过该矩阵就一个值
x1.item() #求标量值,即不是一个矩阵

张量的微分计算
通常我们计算出loss后,需要通过反向传播去实现梯度下降,而这个微分运算实际上扮演的就是反向传播运算。如何实现微分呢,通过如下图所示步骤。只有grad为True时才能跟踪变量进行微分。

x=torch.ones(2,2,requires_grad=True) #设置一个两行两列的全1矩阵,并跟踪运算
y=x+2 #自定义的loss损失函数
y.backward() #反向传播
x.grad() #x的梯度
本文介绍了在PyTorch中创建张量的方法,包括随机矩阵、常数矩阵和从numpy转换,以及张量间的运算如加法、乘法和形状变换。此外,还详细讲解了张量的微分计算,涉及如何使用`requires_grad`追踪和执行反向传播来求梯度。
1677





