繁体   English   中英

PyTorch:为什么 dir(nn.Module()) 和 dir(nn.Module) 之间的区别

[英]PyTorch: why the difference between dir(nn.Module()) and dir(nn.Module)

试过了

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']

为什么这些仅适用于 object 而不是 class? 这些属性有什么特别之处?

反过来说,这些属性仅在 object(在您的情况下为e )上可用,但在 class 上不可用。 原因很简单,这些是在构造函数中创建的属性,因此它们在 class 上不存在,仅在创建 object 时创建。

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()

这些属性没有什么特别之处,它们只是用来跟踪每个单独模块的 state。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM