📅  最后修改于: 2023-12-03 15:34:33.213000             🧑  作者: Mango
PyTorch是一个基于Python的科学计算包,主要针对两类需求:
PyTorch在以下方面提供了强大的支持:
PyTorch的基本数据结构是张量(Tensor)。张量在NumPy中也有体现,但是,PyTorch的张量可以在GPU或其他加速硬件上运行,能够更高效地进行计算。
可以使用torch.tensor
函数创建一个张量。通过指定dtype
参数,可以指定张量中的元素类型(浮点数、整数等)。
import torch
# 创建一个浮点类型的张量
x = torch.tensor([1, 2, 3], dtype=torch.float32)
print(x)
# 空张量
x = torch.empty(2, 3)
print(x)
# 随机初始化张量
x = torch.rand(2, 3)
print(x)
# 创建具有指定形状的张量,并使用随机数据填充
x = torch.randn(2, 3)
print(x)
# 创建与x有相同形状的张量,并使用随机数据填充
y = torch.rand_like(x, dtype=torch.float32)
print(y)
张量可以像NumPy数组一样使用下标和切片操作进行索引和切片。
x = torch.randn(3, 4)
print(x)
# 取第一行第二列的元素
print(x[0][1])
# 取第二列的元素
print(x[:, 1])
# 取前两行后三列的部分
print(x[:2, 1:4])
PyTorch支持张量的基本运算,如加、减、乘、除等。
x = torch.randn(3, 4)
y = torch.randn(3, 4)
# 张量加法
z = x + y
print(z)
# 张量点乘
z = torch.dot(x.reshape(-1), y.reshape(-1))
print(z)
# 矩阵乘法
z = torch.mm(x, y.T)
print(z)
PyTorch使用动态计算图来构建神经网络。动态计算图与静态计算图相比具有更好的灵活性和控制力。
Variable
:是PyTorch在动态计算图中引入的一个概念,代表了计算图中的一个节点,可以看作是Tensor的一个封装。每个Variable
包含三个属性:data
(Tensor的值)、grad
(梯度,初始为0)和grad_fn
(梯度函数,用于进行反向传播)。Function
:是PyTorch中的另一个重要概念,代表了一个计算操作,它接收一个或多个Variable
作为输入,并输出一个或多个Variable
作为输出。import torch
# 定义两个张量
x = torch.tensor([1, 2], dtype=torch.float32)
y = torch.tensor([2, 3], dtype=torch.float32)
# 将x和y封装成Variable
x = torch.autograd.Variable(x, requires_grad=True)
y = torch.autograd.Variable(y, requires_grad=True)
# 定义计算图
z = x * y
z = torch.sum(z)
# 计算梯度
z.backward()
# 查看x和y的梯度
print(x.grad)
print(y.grad)
PyTorch中的nn
模块提供了很多用于构建神经网络的工具。
Module
:是PyTorch中构建神经网络的基本模块。每个Module
都有一个或多个输入(Input
)和一个或多个输出(Output
),可以被视为一个计算图中的节点。PyTorch中的所有神经网络层、损失函数、优化器等都是Module
的子类。Parameter
:PyTorch中的Parameter
代表了模型中可训练的参数。Parameter
是Variable
的子类,因此拥有Variable
的所有属性和方法。import torch
import torch.nn as nn
# 定义一个简单的神经网络模型
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.fc1 = nn.Linear(10, 20)
self.fc2 = nn.Linear(20, 2)
def forward(self, x):
x = self.fc1(x)
x = nn.functional.relu(x)
x = self.fc2(x)
return x
# 使用模型进行前向计算
model = Net()
input = torch.randn(1, 10)
output = model(input)
print(output)
# 查看模型中的参数
for name, param in model.named_parameters():
print(name, param)
PyTorch中的优化器可以帮助我们更新神经网络模型中的参数,以最小化损失函数的值。
Optimizer
:是PyTorch中的优化器工具。需要将模型中的所有可训练参数传递给优化器,然后可以使用step
方法进行参数更新。import torch
import torch.nn as nn
import torch.optim as optim
# 定义一个简单的神经网络模型
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.fc1 = nn.Linear(10, 20)
self.fc2 = nn.Linear(20, 2)
def forward(self, x):
x = self.fc1(x)
x = nn.functional.relu(x)
x = self.fc2(x)
return x
# 使用模型进行前向计算
model = Net()
input = torch.randn(1, 10)
output = model(input)
print(output)
# 定义损失函数和优化器
criterion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)
# 进行参数更新
optimizer.zero_grad()
loss = criterion(output, torch.randn(1, 2))
loss.backward()
optimizer.step()
# 查看模型中的参数
for name, param in model.named_parameters():
print(name, param)
以上就是PyTorch的基础介绍,希望能够帮助您快速上手使用PyTorch进行深度学习的开发。