常见写法是直接把所有的子模块直接写在OrderedDict里面,即OrderedDict([(‘A’, XXX), (‘B’, YYY)] )不常见写法如下:
head = OrderedDict()
head.update({"project_conv": ConvBNAct(head_input_c,
num_features,
kernel_size=1,
norm_layer=norm_layer)}) # 激活函数默认是SiLU
head.update({"avgpool": nn.AdaptiveAvgPool2d(1)})
head.update({"flatten": nn.Flatten()})
if dropout_rate > 0:
head.update({"dropout": nn.Dropout(p=dropout_rate, inplace=True)})
head.update({"classifier": nn.Linear(num_features, num_classes)})
self.head = nn.Sequential(head)
注意事项:nn.Sequential传入head时不用像传递list类型对象那样需要加一个*的标号