PyTorch 是一个基于 Python 的科学计算库,提供了两个主要特征:第一,它是一个 GPU 加速的张量计算库,提供类似于 NumPy 的操作接口,可以在 GPU 上进行加速计算;第二,它是一个自动微分系统,可以用于深度学习模型的开发和训练。
PyTorch 的主要模块包括:
- torch:包含了张量数据类型、数学运算以及用于构建神经网络的函数等等。
- torch.nn:包含了定义神经网络层、损失函数、优化器等等的类和函数。
- torch.autograd:实现了自动微分功能,用于计算梯度。 torch.optim:包含了定义优化器的类和函数。
- torch.utils.data:用于处理数据集和数据加载的工具类和函数。
- torchvision:提供了常见的计算机视觉数据集、模型架构、预训练模型等等。
下面简单介绍一下这些模块的主要功能和使用方法:
1.torch:这个模块包含了很多操作张量的函数,例如张量的创建、数学运算、转换、切片等等。可以将其看作是 NumPy 的一个扩展,但是支持 GPU 加速,也支持自动微分。
2.torch.nn:这个模块提供了很多用于定义神经网络的类和函数,包括了各种不同类型的层、激活函数、损失函数等等。用户可以使用这些类和函数来构建自己的神经网络。
3.torch.autograd:这个模块实现了自动微分功能,用于计算梯度。用户只需要将神经网络中的变量设置为可求导的,PyTorch 就可以自动地计算出其梯度。在计算图中,这些变量被称为叶子节点。
4.torch.optim:这个模块包含了各种不同类型的优化器,例如随机梯度下降(SGD)、Adam、Adagrad 等等。用户可以使用这些优化器来更新神经网络的参数。
5.torch.utils.data:这个模块提供了各种用于处理数据集和数据加载的工具类和函数。例如 DataLoader 类可以用于批量加载数据,Dataset 类可以用于处理自定义数据集,Transforms 类可以用于数据增强等等。
6.torchvision:这个模块提供了常见的计算机视觉数据集、模型架构、预训练模型等等。例如可以使用其中的 ImageFolder 类来加载图像数据集,也可以使用其中的 ResNet 类来构建一个 ResNet 神经网络。
- 创建一个张量:
import torch
x = torch.tensor([1, 2, 3])
- 定义一个简单的神经网络:
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, 1)
def forward(self, x):
x = self.fc1(x)
x = nn.functional.relu(x)
x = self.fc2(x)
return x
net = Net()
- 训练模型:
import torch.optim as optim
criterion = nn.MSELoss()
optimizer = optim.SGD(net.parameters(), lr=0.01)
for epoch in range(100):
running_loss = 0.0
for i, data in enumerate(trainloader, 0):
inputs, labels = data
optimizer.zero_grad()
outputs = net(inputs)
loss = criterion(outputs, labels)
loss.backward()
optimizer.step()
running_loss += loss.item()
print('Epoch %d loss: %.3f' % (epoch + 1, running_loss / len(trainloader)))
- 保存和加载模型:
# 保存模型
PATH = './my_model.pth'
torch.save(net.state_dict(), PATH)
# 加载模型
net = Net()
net.load_state_dict(torch.load(PATH))
这只是PyTorch的一小部分功能,它还包括了很多其他特性,例如数据加载器、自动微分、分布式训练等。如果你需要更多关于PyTorch的帮助,可以查阅官方文档:https://pytorch.org/docs/stable/index.html。