Pytorch中 nn.Sequential(*layers)

在Python中,*作用在形参上,代表这个位置接收任意多个非关键字参数,转化成元组方式;*作用在实参上,代表的是将输入迭代器拆成一个个元素。

Sequential函数的结构函数定义:

说明,使用Sequential的输入要么是orderdict要么是一系列的模型,遇到list必须要用*进行转化,否则会报错:TypeError:list is not a Module subclass.

其中,add_model函数,作用是为Module添加子模块,其中key是子模型的name,module是子模块的内容(如t.nn.Conv2d(...))。 通常情况下是在Module的__init__下,通过self.conv1 = t.nn.Conv2d(...),定义子模块,name为conv1。所以add_model()函数是定义子模块的另一种方式,位置是在__init__以外来定义子模块。

add_model()的使用可以动态调整模型结构,也可以使用别人网络源代码时替换掉一些特定结构而不改动大部分的源代码。

通过Sequential等函数自定义了函数之后,需要在forward函数中通过for循环依次调用添加到self._model中的子模块,最后输出经过所有神经网络层的结果。 这个forward函数放在自定义model的类下。

你可能感兴趣的:(Pytorch中 nn.Sequential(*layers))