在 Pytorch 中为自定义 NN 模块定义命名参数
Defining named parameters for a customized NN module in Pytorch
这个问题是关于如何在Pytorch中正确定义自定义层的参数。我想知道如何使参数最终成为 命名参数 ?
class My_layer(torch.nn.Module):
def __init__(self):
self.mu = torch.nn.Parameter(torch.tensor([[0.0],[1.0]]))
所以当我如下打印参数时,p.name不为空。
my_layer = My_Layer()
for p in my_layer.parameters():
print(p.name, p.data, p.requires_grad)
您正在正确注册参数,但您应该使用 nn.Module.named_parameters
而不是 nn.Module.parameters
来访问名称。目前您正在尝试访问 Parameter.name
,这可能不是您想要的。 Parameter
和 Tensor
的 name
属性似乎没有记录,但据我所知,它们指的是 _C._TensorBase
[=31] 的内部属性=] 并且不能被外部修改。
每次您将 Parameter
分配给模块的属性时,它都会注册一个名称(这发生在 nn.Module.__setattr__
here 中)。该参数始终采用与属性本身相同的名称,因此在本例中为 "mu"
。要遍历所有参数及其关联名称,请使用 nn.Module.named_parameters
。例如,
my_layer = My_Layer()
for n, p in my_layer.named_parameters():
print('Parameter name:', n)
print(p.data)
print('requires_grad:', p.requires_grad)
打印
Parameter name: mu
tensor([[0.],
[1.]])
requires_grad: True
这个问题是关于如何在Pytorch中正确定义自定义层的参数。我想知道如何使参数最终成为 命名参数 ?
class My_layer(torch.nn.Module):
def __init__(self):
self.mu = torch.nn.Parameter(torch.tensor([[0.0],[1.0]]))
所以当我如下打印参数时,p.name不为空。
my_layer = My_Layer()
for p in my_layer.parameters():
print(p.name, p.data, p.requires_grad)
您正在正确注册参数,但您应该使用 nn.Module.named_parameters
而不是 nn.Module.parameters
来访问名称。目前您正在尝试访问 Parameter.name
,这可能不是您想要的。 Parameter
和 Tensor
的 name
属性似乎没有记录,但据我所知,它们指的是 _C._TensorBase
[=31] 的内部属性=] 并且不能被外部修改。
每次您将 Parameter
分配给模块的属性时,它都会注册一个名称(这发生在 nn.Module.__setattr__
here 中)。该参数始终采用与属性本身相同的名称,因此在本例中为 "mu"
。要遍历所有参数及其关联名称,请使用 nn.Module.named_parameters
。例如,
my_layer = My_Layer()
for n, p in my_layer.named_parameters():
print('Parameter name:', n)
print(p.data)
print('requires_grad:', p.requires_grad)
打印
Parameter name: mu
tensor([[0.],
[1.]])
requires_grad: True