PyTorch: почему разница между dir (nn.Module ()) и dir (nn.Module) - PullRequest
0 голосов
/ 18 апреля 2020

Tried

e = dir(nn.Module())
f = dir(nn.Module)
print([item for item in e if item not in f])

Это дает

['_backward_hooks', '_buffers', '_forward_hooks', '_forward_pre_hooks', '_load_state_dict_pre_hooks', '_modules', '_parameters', '_state_dict_hooks', 'training']

, почему они доступны только для объекта, а не класса? Что особенного в этих атрибутах?

1 Ответ

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

С другой стороны, эти атрибуты доступны только для объекта (e в вашем случае), но не для класса. Причина проста: это атрибуты, которые создаются в конструкторе, поэтому они не существуют в классе и создаются только при создании объекта.

Из реализации nn.Module :

def __init__(self):
    """
    Initializes internal Module state, shared by both nn.Module and ScriptModule.
    """
    torch._C._log_api_usage_once("python.nn_module")

    self.training = True
    self._parameters = OrderedDict()
    self._buffers = OrderedDict()
    self._backward_hooks = OrderedDict()
    self._forward_hooks = OrderedDict()
    self._forward_pre_hooks = OrderedDict()
    self._state_dict_hooks = OrderedDict()
    self._load_state_dict_pre_hooks = OrderedDict()
    self._modules = OrderedDict()

В этих атрибутах нет ничего особенного, они просто используются для отслеживания состояния каждого отдельного модуля.

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