Skip to content

Caffe2 - 定义复杂网络

在上一课中,您学习了如何使用 PyTorch 的 nn.Module 和 nn.Linear 定义一个简单的单层网络。构建复杂的深度学习架构遵循相同的基本原则。PyTorch 在 torch.nn 模块中提供了一套丰富的构建块,用于构建复杂的模型。

您可以通过以下方式创建复杂网络:

  • 使用 nn.Sequential 顺序堆叠多个层。
  • 定义自定义的 nn.Module 子类,在 __init__ 方法中指定层,并在 forward 方法中定义前向传播逻辑。这提供了最大的灵活性。
  • 组合预构建的层,如卷积层(nn.Conv2d)、循环层(nn.LSTM、nn.GRU)、归一化层(nn.BatchNorm2d)、dropout 层(nn.Dropout)和激活函数(nn.ReLU、nn.Sigmoid、nn.Softmax 等)。
  • 重用现有模块或将它们组合成更大的架构。

PyTorch 的动态计算图使得实现具有动态结构或控制流的模型变得容易(例如,在 forward 方法中使用标准的 Python if 语句或 for 循环)。建议您查阅丰富的 torch.nn 文档,获取可用层和实用工具的完整列表:https://pytorch.org/docs/stable/nn.html

定义好网络架构后,下一步通常是在数据上训练它。这包括定义一个损失函数(loss function)(例如分类任务使用 nn.CrossEntropyLoss,回归任务使用 nn.MSELoss)和一个优化器(optimizer)(例如 torch.optim.Adam、torch.optim.SGD)。训练循环包括遍历数据集,执行前向传播(forward pass),计算损失(loss),执行反向传播(backward pass)计算梯度(gradients)(使用 loss.backward()),并更新模型参数(model parameters)(使用 optimizer.step())。

训练完成后,您可以使用 torch.save(model.state_dict(), 'model_weights.pth') 保存学习到的模型参数(即 ‘state dictionary’,状态字典)。保存的模型稍后可用于对新数据进行推理(inference)或使用 TorchServe 等工具部署到生产环境,或转换为移动端执行。

PyTorch 提供了一个灵活而强大的深度学习框架。您可以利用 torchvision.models 中的预训练模型来完成图像分类等任务,或者使用 nn.Module 和各种各样的层来定义自己的自定义网络架构。整个过程包括定义模型、准备数据、选择损失函数和优化器,以及实现训练循环。训练好的模型可以保存并部署到实际应用中。