PyTorch中的nn.functional()与nn.sequential()之间是否存在任何计算效率差异

ult*_*der 5 neural-network python-3.x deep-learning pytorch tensor

以下是使用PyTorch中的nn.functional()模块的前馈网络

import torch.nn.functional as F

class newNetwork(nn.Module):
    def __init__(self):
       super().__init__()
        self.fc1 = nn.Linear(784, 128)
        self.fc2 = nn.Linear(128, 64)
        self.fc3 = nn.Linear(64,10)

    def forward(self,x):
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = F.softmax(self.fc3(x))
        return x

model = newNetwork()
model
Run Code Online (Sandbox Code Playgroud)

以下是使用nn.sequential()模块进行本质上相同构建的相同前馈。两者之间有什么区别?什么时候我可以使用一个而不是另一个?

input_size = 784
hidden_sizes = [128, 64]
output_size = 10
Run Code Online (Sandbox Code Playgroud)

建立前馈网络

 model = nn.Sequential(nn.Linear(input_size, hidden_sizes[0]),
                      nn.ReLU(),
                      nn.Linear(hidden_sizes[0], hidden_sizes[1]),
                      nn.ReLU(),
                      nn.Linear(hidden_sizes[1], output_size),
                      nn.Softmax(dim=1))
    print(model)
Run Code Online (Sandbox Code Playgroud)

Jat*_*aki 5

两者之间没有区别。后者可以说是更简洁,更容易编写,以及纯(即非有状态)函数的“目标”版本的原因,例如,ReLUSigmoid允许它们在类似的构造中使用nn.Sequential