как определение нейронной сети в pytorch использует классы pyton - PullRequest
0 голосов
/ 06 апреля 2020

Чтобы понять, как работает этот код, я написал маленький репродуктор . Как переменная self.hidden использует переменную x в методе forward?

enter code class Network(nn.Module):
def __init__(self):
    super().__init__()

    # Inputs to hidden layer linear transformation
    self.hidden = nn.Linear(784, 256)
    # Output layer, 10 units - one for each digit
    self.output = nn.Linear(256, 10)

    # Define sigmoid activation and softmax output 
    self.sigmoid = nn.Sigmoid()
    self.softmax = nn.Softmax(dim=1)

def forward(self, x):
    # Pass the input tensor through each of our operations
    x = self.hidden(x)
    x = self.sigmoid(x)
    x = self.output(x)
    x = self.softmax(x)

    return x

1 Ответ

1 голос
/ 06 апреля 2020

Вы неправильно поняли, что делает self.hidden = nn.Linear(784, 256). Вы написали, что:

hidden определяется как функция

, но это не так. self.hidden является объектом класса nn.Linear. И когда вы вызываете self.hidden(...), вы не передаете аргументы nn.Linear; вы передаете аргументы в __call__ (определенный в классе nn.Linear).

Если вы хотите получить более подробную информацию об этом, я подробно рассказал о том, как это работает в PyTorch: см. этот ответ .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...