Можете ли вы передать переменную члену данных в Python, как это сделано в Pytorch? - PullRequest
2 голосов
/ 03 июля 2019

Вот пример кода из nn.Module документации по pytorch:

class Model(nn.Module):
    def __init__(self):
        super(Model, self).__init__()
        self.conv1 = nn.Conv2d(1, 20, 5)
        self.conv2 = nn.Conv2d(20, 20, 5)

    def forward(self, x):
       x = F.relu(self.conv1(x))
       return F.relu(self.conv2(x))

Здесь мы передаем x в self.conv1() в функции forward.Однако self.conv1 - это переменная, которая может быть из этой строки self.conv1 = nn.Conv2d(1, 20, 5) в функции __init__.

Как это возможно?

Ответы [ 2 ]

1 голос
/ 05 июля 2019

Передача всего, что находится в pytorch, слое или сети, выполняется функционально var(x).Это сделано в Python с перезаписью __call__() встроенным.Попробуй сам.Создайте класс, перезапишите __call__() и используйте его как функцию.

0 голосов
/ 05 июля 2019

Я вижу, это хороший вопрос.

self.conv1 = nn.Conv2d(1, 20, 5)

self.conv1 действительно переменная, но она также является специальной переменной класса, полученной nn.Module (читай: модуль).

И это также вызываемый, реализованный __call__ метод, и поэтому мы можем его вызвать.

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