【翻译】class torch.nn.ParameterList(parameters=None)

参考链接: class torch.nn.ParameterList(parameters=None)

在这里插入图片描述
原文及翻译:

ParameterList  ParameterList章节

class torch.nn.ParameterList(parameters=None)
类型: class torch.nn.ParameterList(parameters=None)
    Holds parameters in a list.
    该类型可以以列表的方式持有多个参数.
    ParameterList can be indexed like a regular Python list, but parameters it contains 
    are properly registered, and will be visible by all Module methods.
    ParameterList 类型可以像普通Python列表一样进行索引访问,但是所不同的是它所包含的参数将会被
    正确地登记注册,并且可以被所有的Module模块方法可见.

    Parameters  参数
        parameters (iterable, optional) – an iterable of Parameter to add
        parameters (可迭代类型, 可选) –  这是由需要添加的参数构成的可迭代对象.

    Example:  例子:

    class MyModule(nn.Module):
        def __init__(self):
            super(MyModule, self).__init__()
            self.params = nn.ParameterList([nn.Parameter(torch.randn(10, 10)) for i in range(10)])

        def forward(self, x):
            # ParameterList can act as an iterable, or be indexed using ints
            # ParameterList类型的对象可以像可迭代对象一样使用,或者使用整数来进行索引
            for i, p in enumerate(self.params):
                x = self.params[i // 2].mm(x) + p.mm(x)
            return x

    append(parameter)
    方法: append(parameter)
        Appends a given parameter at the end of the list.
        向列表的末尾追加一个给定的参数.
        Parameters  参数
            parameter (nn.Parameter) – parameter to append
            parameter (nn.Parameter) – 需要追加的参数

    extend(parameters)
    方法: extend(parameters)

        Appends parameters from a Python iterable to the end of the list.
        将一个Python可迭代类型中的参数追加到列表的末尾.
        Parameters  参数
            parameters (iterable) – iterable of parameters to append
            parameters (iterable可迭代类型) – 由需要追加的参数构成的可迭代对象

代码实验展示:

Microsoft Windows [版本 10.0.18363.1316]
(c) 2019 Microsoft Corporation。保留所有权利。

C:\Users\chenxuqi>conda activate ssd4pytorch1_2_0

(ssd4pytorch1_2_0) C:\Users\chenxuqi>python
Python 3.7.7 (default, May  6 2020, 11:45:54) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> torch.manual_seed(seed=20200910)
<torch._C.Generator object at 0x000001FC6AFBD330>
>>> import torch.nn as nn
>>> params = nn.ParameterList([nn.Parameter(torch.randn(10, 10)) for i in range(10)])
>>> params = nn.ParameterList([nn.Parameter(torch.randn(10+i, 10+i)) for i in range(10)])
>>> params[0].shape
torch.Size([10, 10])
>>> params[9].shape
torch.Size([19, 19])
>>> params[10].shape
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "D:\Anaconda3\envs\ssd4pytorch1_2_0\lib\site-packages\torch\nn\modules\container.py", line 377, in __getitem__
    idx = self._get_abs_string_index(idx)
  File "D:\Anaconda3\envs\ssd4pytorch1_2_0\lib\site-packages\torch\nn\modules\container.py", line 368, in _get_abs_string_index
    raise IndexError('index {} is out of range'.format(idx))
IndexError: index 10 is out of range
>>> params[-1].shape
torch.Size([19, 19])
>>> params[-10].shape
torch.Size([10, 10])
>>> params[-11].shape
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "D:\Anaconda3\envs\ssd4pytorch1_2_0\lib\site-packages\torch\nn\modules\container.py", line 377, in __getitem__
    idx = self._get_abs_string_index(idx)
  File "D:\Anaconda3\envs\ssd4pytorch1_2_0\lib\site-packages\torch\nn\modules\container.py", line 368, in _get_abs_string_index
    raise IndexError('index {} is out of range'.format(idx))
IndexError: index -11 is out of range
>>>
>>> len(params)
10
>>> for param in params:
...     print(param.shape)
...
torch.Size([10, 10])
torch.Size([11, 11])
torch.Size([12, 12])
torch.Size([13, 13])
torch.Size([14, 14])
torch.Size([15, 15])
torch.Size([16, 16])
torch.Size([17, 17])
torch.Size([18, 18])
torch.Size([19, 19])
>>>
>>> parameter = nn.Parameter(torch.randn(8, 9))
>>> params.append(parameter)
ParameterList(
    (0): Parameter containing: [torch.FloatTensor of size 10x10]
    (1): Parameter containing: [torch.FloatTensor of size 11x11]
    (2): Parameter containing: [torch.FloatTensor of size 12x12]
    (3): Parameter containing: [torch.FloatTensor of size 13x13]
    (4): Parameter containing: [torch.FloatTensor of size 14x14]
    (5): Parameter containing: [torch.FloatTensor of size 15x15]
    (6): Parameter containing: [torch.FloatTensor of size 16x16]
    (7): Parameter containing: [torch.FloatTensor of size 17x17]
    (8): Parameter containing: [torch.FloatTensor of size 18x18]
    (9): Parameter containing: [torch.FloatTensor of size 19x19]
    (10): Parameter containing: [torch.FloatTensor of size 8x9]
)
>>> params
ParameterList(
    (0): Parameter containing: [torch.FloatTensor of size 10x10]
    (1): Parameter containing: [torch.FloatTensor of size 11x11]
    (2): Parameter containing: [torch.FloatTensor of size 12x12]
    (3): Parameter containing: [torch.FloatTensor of size 13x13]
    (4): Parameter containing: [torch.FloatTensor of size 14x14]
    (5): Parameter containing: [torch.FloatTensor of size 15x15]
    (6): Parameter containing: [torch.FloatTensor of size 16x16]
    (7): Parameter containing: [torch.FloatTensor of size 17x17]
    (8): Parameter containing: [torch.FloatTensor of size 18x18]
    (9): Parameter containing: [torch.FloatTensor of size 19x19]
    (10): Parameter containing: [torch.FloatTensor of size 8x9]
)
>>> parameters = [nn.Parameter(torch.randn(60+i, 50+i)) for i in range(5)]
>>> parameters
[Parameter containing:
tensor([[-1.4327e+00,  6.8200e-01,  2.5649e-01,  ...,  6.6165e-02,
         -1.3798e+00, -9.7789e-02],
        [-2.8027e-01, -9.4428e-01,  4.5486e-01,  ...,  4.1896e-01,
         -1.2095e+00, -6.0156e-01],
        [ 2.1879e-01, -5.7297e-02, -1.7633e-04,  ...,  1.3900e+00,
          1.2983e+00,  7.3527e-01],
        ...,
        [ 1.9722e-01, -4.0972e-01,  5.0989e-01,  ...,  7.7913e-01,
         -6.0865e-02,  8.5107e-01],
        [-1.1421e+00,  4.5078e-01, -1.8716e-01,  ..., -1.1327e+00,
         -1.9919e+00, -5.4727e-01],
        [ 5.5285e-01,  4.6205e-01, -1.2802e+00,  ..., -7.2663e-01,
          1.1187e+00, -4.4182e-01]], requires_grad=True), Parameter containing:
tensor([[-1.7385,  0.0830,  0.5688,  ..., -0.9926, -1.5028, -1.2974],
        [ 0.4078,  0.5468,  0.8926,  ..., -0.2851, -1.4986, -0.2669],
        [-0.1923,  0.3213, -0.1558,  ..., -0.4635,  0.0168, -0.0310],
        ...,
        [ 0.1969,  0.0648, -0.7281,  ...,  0.6067, -1.0499, -0.5244],
        [-1.1800,  0.2413,  1.1485,  ..., -1.2141, -0.7107,  0.1033],
        [ 0.5751,  2.7271, -0.2200,  ...,  1.2645, -1.3813,  0.6229]],
       requires_grad=True), Parameter containing:
tensor([[-0.2797, -0.6499, -0.5414,  ..., -0.6571, -0.2593, -0.5523],
        [ 0.6927, -0.9233,  0.4714,  ...,  0.2973, -0.5487, -1.1218],
        [ 1.3224, -0.7970, -0.6376,  ..., -1.1336,  0.3770,  0.7309],
        ...,
        [ 1.8428, -1.4932,  0.3746,  ..., -0.0096, -1.3073, -0.6518],
        [-0.3864,  0.4540, -0.1361,  ...,  0.4061, -0.3249, -0.4137],
        [-0.3859, -1.3519,  0.8041,  ...,  1.4219, -0.6871, -0.0086]],
       requires_grad=True), Parameter containing:
tensor([[-1.9216, -0.6074, -0.1999,  ...,  0.9046,  2.1141, -0.7215],
        [-0.2360,  0.9330,  0.5236,  ..., -0.2035,  0.8055,  0.2836],
        [ 1.1689,  0.4541, -0.1447,  ...,  0.7066, -1.7364,  0.7813],
        ...,
        [-0.4927, -0.1389,  0.3624,  ..., -0.4476,  2.1240, -0.5492],
        [-1.9080, -0.0278, -0.5750,  ..., -0.5731, -0.5468, -0.3185],
        [ 0.1719,  0.8048, -0.5750,  ...,  0.1466,  0.9001, -0.5680]],
       requires_grad=True), Parameter containing:
tensor([[ 0.0122,  0.7255, -0.0440,  ..., -0.5265, -1.1177, -0.5811],
        [-0.0897,  0.3565,  0.0930,  ...,  0.2524, -0.6974, -0.2267],
        [-0.3315, -0.0101, -0.1876,  ...,  0.6636, -0.4355, -1.9713],
        ...,
        [-1.0123, -0.2035, -0.7809,  ...,  1.2322, -0.0073, -0.7217],
        [ 0.1468,  0.0892,  0.0316,  ..., -1.4299, -0.5107, -0.9305],
        [ 0.0172,  0.1257, -0.2732,  ..., -0.6751, -0.1928, -2.0659]],
       requires_grad=True)]
>>> params.extend(parameters)
ParameterList(
    (0): Parameter containing: [torch.FloatTensor of size 10x10]
    (1): Parameter containing: [torch.FloatTensor of size 11x11]
    (2): Parameter containing: [torch.FloatTensor of size 12x12]
    (3): Parameter containing: [torch.FloatTensor of size 13x13]
    (4): Parameter containing: [torch.FloatTensor of size 14x14]
    (5): Parameter containing: [torch.FloatTensor of size 15x15]
    (6): Parameter containing: [torch.FloatTensor of size 16x16]
    (7): Parameter containing: [torch.FloatTensor of size 17x17]
    (8): Parameter containing: [torch.FloatTensor of size 18x18]
    (9): Parameter containing: [torch.FloatTensor of size 19x19]
    (10): Parameter containing: [torch.FloatTensor of size 8x9]
    (11): Parameter containing: [torch.FloatTensor of size 60x50]
    (12): Parameter containing: [torch.FloatTensor of size 61x51]
    (13): Parameter containing: [torch.FloatTensor of size 62x52]
    (14): Parameter containing: [torch.FloatTensor of size 63x53]
    (15): Parameter containing: [torch.FloatTensor of size 64x54]
)
>>> params
ParameterList(
    (0): Parameter containing: [torch.FloatTensor of size 10x10]
    (1): Parameter containing: [torch.FloatTensor of size 11x11]
    (2): Parameter containing: [torch.FloatTensor of size 12x12]
    (3): Parameter containing: [torch.FloatTensor of size 13x13]
    (4): Parameter containing: [torch.FloatTensor of size 14x14]
    (5): Parameter containing: [torch.FloatTensor of size 15x15]
    (6): Parameter containing: [torch.FloatTensor of size 16x16]
    (7): Parameter containing: [torch.FloatTensor of size 17x17]
    (8): Parameter containing: [torch.FloatTensor of size 18x18]
    (9): Parameter containing: [torch.FloatTensor of size 19x19]
    (10): Parameter containing: [torch.FloatTensor of size 8x9]
    (11): Parameter containing: [torch.FloatTensor of size 60x50]
    (12): Parameter containing: [torch.FloatTensor of size 61x51]
    (13): Parameter containing: [torch.FloatTensor of size 62x52]
    (14): Parameter containing: [torch.FloatTensor of size 63x53]
    (15): Parameter containing: [torch.FloatTensor of size 64x54]
)
>>> for param in params:
...     print(param.shape)
...
torch.Size([10, 10])
torch.Size([11, 11])
torch.Size([12, 12])
torch.Size([13, 13])
torch.Size([14, 14])
torch.Size([15, 15])
torch.Size([16, 16])
torch.Size([17, 17])
torch.Size([18, 18])
torch.Size([19, 19])
torch.Size([8, 9])
torch.Size([60, 50])
torch.Size([61, 51])
torch.Size([62, 52])
torch.Size([63, 53])
torch.Size([64, 54])
>>>
>>>
>>>

代码实验展示: 由参数构成的普通Python列表不会被正确地注册登记:

import torch 
import torch.nn as nn
torch.manual_seed(seed=20200910)
class Model(torch.nn.Module):
    def __init__(self):
        super(Model,self).__init__()
        self.params_ParameterList_in = nn.ParameterList([nn.Parameter(torch.randn(10+i, 10+2*i)) for i in range(10)])
        self.params_PythonList_in = [nn.Parameter(torch.randn(80, 80)) for i in range(10)]

    def forward(self,x): 
        pass

print('cuda(GPU)是否可用:',torch.cuda.is_available())
print('torch的版本:',torch.__version__)

model = Model() #.cuda()
print('普通Python列表不会被正确登记注册'.center(100,"-"))
print("打印模型".center(100,"-"))
for name, param in model.named_parameters(prefix='', recurse=True):
    print('参数名字是:', name, '参数形状是:', param.shape)

model.params_ParameterList_out = nn.ParameterList([nn.Parameter(torch.randn(50, 50)) for i in range(10)])
model.params_PythonList_out = [nn.Parameter(torch.randn(60, 60)) for i in range(10)]


print('普通Python列表不会被正确登记注册'.center(100,"-"))
print("打印模型".center(100,"-"))
for name, param in model.named_parameters(prefix='', recurse=True):
    print('参数名字是:', name, '参数形状是:', param.shape)

控制台输出结果展示:

Windows PowerShell
版权所有 (C) Microsoft Corporation。保留所有权利。

尝试新的跨平台 PowerShell https://aka.ms/pscore6

加载个人及系统配置文件用了 833 毫秒。
(base) PS C:\Users\chenxuqi\Desktop\News4cxq\test4cxq> conda activate ssd4pytorch1_2_0
(ssd4pytorch1_2_0) PS C:\Users\chenxuqi\Desktop\News4cxq\test4cxq>  & 'D:\Anaconda3\envs\ssd4pytorch1_2_0\python.exe' 'c:\Users\chenxuqi\.vscode\extensions\ms-python.python-2020.12.424452561\pythonFiles\lib\python\debugpy\launcher' '53898' '--' 'c:\Users\chenxuqi\Desktop\News4cxq\test4cxq\test2.py'
cuda(GPU)是否可用: True
torch的版本: 1.2.0+cu92
----------------------------------------普通Python列表不会被正确登记注册-----------------------------------------
------------------------------------------------打印模型------------------------------------------------
参数名字是: params_ParameterList_in.0 参数形状是: torch.Size([10, 10])
参数名字是: params_ParameterList_in.1 参数形状是: torch.Size([11, 12])
参数名字是: params_ParameterList_in.2 参数形状是: torch.Size([12, 14])
参数名字是: params_ParameterList_in.3 参数形状是: torch.Size([13, 16])
参数名字是: params_ParameterList_in.4 参数形状是: torch.Size([14, 18])
参数名字是: params_ParameterList_in.5 参数形状是: torch.Size([15, 20])
参数名字是: params_ParameterList_in.6 参数形状是: torch.Size([16, 22])
参数名字是: params_ParameterList_in.7 参数形状是: torch.Size([17, 24])
参数名字是: params_ParameterList_in.8 参数形状是: torch.Size([18, 26])
参数名字是: params_ParameterList_in.9 参数形状是: torch.Size([19, 28])
----------------------------------------普通Python列表不会被正确登记注册-----------------------------------------
------------------------------------------------打印模型------------------------------------------------
参数名字是: params_ParameterList_in.0 参数形状是: torch.Size([10, 10])
参数名字是: params_ParameterList_in.1 参数形状是: torch.Size([11, 12])
参数名字是: params_ParameterList_in.2 参数形状是: torch.Size([12, 14])
参数名字是: params_ParameterList_in.3 参数形状是: torch.Size([13, 16])
参数名字是: params_ParameterList_in.4 参数形状是: torch.Size([14, 18])
参数名字是: params_ParameterList_in.5 参数形状是: torch.Size([15, 20])
参数名字是: params_ParameterList_in.6 参数形状是: torch.Size([16, 22])
参数名字是: params_ParameterList_in.7 参数形状是: torch.Size([17, 24])
参数名字是: params_ParameterList_in.8 参数形状是: torch.Size([18, 26])
参数名字是: params_ParameterList_in.9 参数形状是: torch.Size([19, 28])
参数名字是: params_ParameterList_out.0 参数形状是: torch.Size([50, 50])
参数名字是: params_ParameterList_out.1 参数形状是: torch.Size([50, 50])
参数名字是: params_ParameterList_out.2 参数形状是: torch.Size([50, 50])
参数名字是: params_ParameterList_out.3 参数形状是: torch.Size([50, 50])
参数名字是: params_ParameterList_out.4 参数形状是: torch.Size([50, 50])
参数名字是: params_ParameterList_out.5 参数形状是: torch.Size([50, 50])
参数名字是: params_ParameterList_out.6 参数形状是: torch.Size([50, 50])
参数名字是: params_ParameterList_out.7 参数形状是: torch.Size([50, 50])
参数名字是: params_ParameterList_out.8 参数形状是: torch.Size([50, 50])
参数名字是: params_ParameterList_out.9 参数形状是: torch.Size([50, 50])
(ssd4pytorch1_2_0) PS C:\Users\chenxuqi\Desktop\News4cxq\test4cxq> 

猜你喜欢

转载自blog.csdn.net/m0_46653437/article/details/112760263