开始使用免费开始使用

PyTorch 模型

您将使用面向对象编程(OOP)方式来定义模型结构。回顾一下,这需要先建立一个模型类,并在其中定义两个方法:

  • .__init__():在这里定义将要使用的各层;

  • forward():在这里定义模型接收输入后会发生什么;也就是将输入依次传过预先定义的各层。

我们来构建一个包含 3 个线性层且使用 ReLU 激活的模型。在最后一个线性层之后,需要改用 sigmoid 激活,这非常适合我们这样的二分类任务(预测饮用水可饮用性)。下面是使用 nn.Sequential() 定义的等价模型,您可能更熟悉这种写法:

net = nn.Sequential(
  nn.Linear(9, 16),
  nn.ReLU(),
  nn.Linear(16, 8),
  nn.ReLU(),
  nn.Linear(8, 1),
  nn.Sigmoid(),
)

现在,让我们把这个模型改写成一个类!

本练习是课程的一部分

PyTorch 深度学习进阶

查看课程

练习说明

  • .__init__() 方法中,按照给定的模型定义设置 3 个线性层的维度,并分别赋给 self.fc1self.fc2self.fc3
  • forward() 方法中,将模型输入 x 依次传过所有层,并为它们添加相应的激活函数,方式与第一层中已有的做法类似。

交互式实操练习

通过完成这段示例代码来试试这个练习。

import torch.nn as nn
import torch.nn.functional as F

class Net(nn.Module):
    def __init__(self):
        super().__init__()
        # Define the three linear layers
        self.fc1 = ____
        self.fc2 = ____
        self.fc3 = ____
        
    def forward(self, x):
        # Pass x through linear layers adding activations
        x = nn.functional.relu(self.fc1(x))
        x = ____
        x = ____
        return x
编辑并运行代码