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.fc1、self.fc2和self.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