Skip to content

第3章:构建和训练模型

在PyTorch中,构建和训练模型是一个核心过程。本章将详细介绍如何定义网络层、选择损失函数和优化器,以及如何进行模型训练和评估。

3.1 定义网络层和模型

3.1.1 构建网络层

在PyTorch中,可以通过继承nn.Module来定义自己的网络层或整个模型。

python
import torch.nn as nn

class CustomModel(nn.Module):
    def __init__(self):
        super(CustomModel, self).__init__()
        self.layer1 = nn.Linear(10, 20)
        self.layer2 = nn.Linear(20, 10)

    def forward(self, x):
        x = torch.relu(self.layer1(x))
        x = self.layer2(x)
        return x

3.1.2 实例化模型

实例化模型并将其转移到GPU上(如果可用)。

python
model = CustomModel()
if torch.cuda.is_available():
    model.cuda()

3.2 选择损失函数和优化器

3.2.1 损失函数

选择合适的损失函数对于模型训练至关重要。

python
import torch.nn as nn

criterion = nn.CrossEntropyLoss()

3.2.2 优化器

选择合适的优化器来更新模型参数。

python
import torch.optim as optim

optimizer = optim.Adam(model.parameters(), lr=0.001)

3.3 训练循环和评估

3.3.1 训练模型

编写训练循环,包括前向传播、计算损失、反向传播和参数更新。

python
for epoch in range(num_epochs):
    for inputs, labels in dataloader:
        optimizer.zero_grad()
        outputs = model(inputs)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()

3.3.2 评估模型

在验证集上评估模型性能。

python
model.eval()
with torch.no_grad():
    correct = 0
    total = 0
    for inputs, labels in valid_dataloader:
        outputs = model(inputs)
        _, predicted = torch.max(outputs.data, 1)
        total += labels.size(0)
        correct += (predicted == labels).sum().item()
accuracy = 100 * correct / total
print(f'Accuracy: {accuracy}%')

3.4 本章小结

本章介绍了如何在PyTorch中构建和训练模型,包括定义网络层、选择损失函数和优化器,以及进行模型训练和评估。这些步骤是深度学习项目中不可或缺的部分。