Существуют ли различия в вычислительной эффективности между nn.functional () и nn.sequential () в PyTorch? - PullRequest
0 голосов
/ 12 декабря 2018

Ниже приведена сеть с прямой связью, использующая модуль nn.functional () в PyTorch

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

Ниже приводится та же самая прямая связь с использованием модуля nn.sequential (), по сути, для ее построения.вещь.В чем разница между этими двумя и когда я бы использовал один вместо другого?

input_size = 784
hidden_sizes = [128, 64]
output_size = 10

Создание сети прямой связи

 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)

1 Ответ

0 голосов
/ 12 декабря 2018

Разницы между ними нет.Последний, возможно, более лаконичен и проще в написании, и причина «объективных» версий чистых (то есть не сохраняющих состояние) функций, таких как ReLU и Sigmoid, заключается в том, чтобы разрешить их использование в конструкциях, подобных nn.Sequential.

.
...