如下的一段代码,不明白为什么要add_sublayer,直接dws21=DepthwiseSeparable不行吗?尝试去掉add_sublayer,能运行但效果变差,add_sublayer的作用是什么?
self.dwsl=[ ]
dws21 = self.add_sublayer(
sublayer=DepthwiseSeparable(
num_channels=32,
num_filters1=32,
num_filters2=64,
num_groups=32,
stride=1),
name="conv2_1")
self.dwsl.append(dws21)
4条答案
按热度按时间vnjpjtjt1#
add_sublayer 是为了收集子layer 包含的参数,参数收集是通过 重载了 __setattr__来实现的,self.xxx yyy 会触发setattr, 直接 dws21=DepthwiseSeparable 是不会触发
如果没有add_sublayer ,参数是不会训练的,所以效果会差
这个问题有两个解决方案:
vktxenjb2#
好的,再请教下,什么时候需要add_sublayer,什么时候不需要,是不是当要用数组把层放入时,就要用add_sublayer,如果不用数组,就不需要add_sublayer?
fcipmucu3#
数组的时候才需要 add_sublayer, 单个的不需要 可以直接写 self.proj = Linear()
ffvjumwh4#
多谢!