Appearance
第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 x3.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中构建和训练模型,包括定义网络层、选择损失函数和优化器,以及进行模型训练和评估。这些步骤是深度学习项目中不可或缺的部分。
