Paddle add_sublayer的作用是什么?

fsi0uk1n  于 2021-11-30  发布在  Java
关注(0)|答案(4)|浏览(765)

如下的一段代码,不明白为什么要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)

vnjpjtjt

vnjpjtjt1#

add_sublayer 是为了收集子layer 包含的参数,参数收集是通过 重载了 __setattr__来实现的,self.xxx yyy 会触发setattr, 直接 dws21=DepthwiseSeparable 是不会触发
如果没有add_sublayer ,参数是不会训练的,所以效果会差

这个问题有两个解决方案:

  1. add_sublayer
  2. slef.dwsl = fluid.dygraph.LayerLis( self.dwsl ) 用LayerList包裹下 你的layer 数组, 在最新的1.8中,你可以定义slef.dwsl = fluid.dygraph.LayerLis() ,然后调用self.dwsl.append()
vktxenjb

vktxenjb2#

好的,再请教下,什么时候需要add_sublayer,什么时候不需要,是不是当要用数组把层放入时,就要用add_sublayer,如果不用数组,就不需要add_sublayer?

fcipmucu

fcipmucu3#

数组的时候才需要 add_sublayer, 单个的不需要 可以直接写 self.proj = Linear()

相关问题