函数named_parameters(),返回各层中参数名称和数据
class MLP(nn.Module):
def __init__(self):
super(MLP, self).__init__()
self.hidden = nn.Sequential(
nn.Linear(256,64),
nn.ReLU(inplace=True),
nn.Linear(64,10)
)
def forward(self, x):
return self.hidden(x)
#x = torch.randperm(256*2).view(-1,256)
net = MLP()
net(x.float())
#随机输出结果
tensor([[ 73.2550, -51.5631, 4.3549, 19.0657, -55.6626, -80.8340,
-21.1650, 93.4071, -9.8959, -49.4214],
[ 39.6934, -2.6528, 63.8478, -5.0462, -83.4204, -128.7376,
72.5279, 3.0522, 77.3654, -70.5397]], grad_fn=<AddmmBackward>)
params = net.named_parameters()
for name, param in params:
print(name, param.data.shape)
print(type(param))
hidden.0.weight torch.Size([64, 256])
hidden.0.bias torch.Size([64])
hidden.2.weight torch.Size([10, 64])
hidden.2.bias torch.Size([10])
<class 'torch.nn.parameter.Parameter'>
源码:
def _named_members(self, get_members_fn, prefix='', recurse=True):
r"""Helper method for yielding various names + members of modules."""
memo = set()
modules = self.named_modules(prefix=prefix) if recurse else [(prefix, self)]
for module_prefix, module in modules:
members = get_members_fn(module)
for k, v in members:
if v is None or v in memo:
continue
memo.add(v)
name = module_prefix + ('.' if module_prefix else '') + k
yield name, v
def named_parameters(self, prefix='', recurse=True):
r"""Returns an iterator over module parameters, yielding both the
name of the parameter as well as the parameter itself.
Args:
prefix (str): prefix to prepend to all parameter names.
recurse (bool): if True, then yields parameters of this module
and all submodules. Otherwise, yields only parameters that
are direct members of this module.
Yields:
(string, Parameter): Tuple containing the name and parameter
Example::
>>> for name, param in self.named_parameters():
>>> if name in ['bias']:
>>> print(param.size())
"""
gen = self._named_members(
lambda module: module._parameters.items(),
prefix=prefix, recurse=recurse)
for elem in gen:
yield elem
来源:CSDN
作者:小白827
链接:https://blog.csdn.net/qq_24503095/article/details/103630382