改进后的代码与原文res stack有一些区别
Opened this issue · 0 comments
silentsaber commented
您在复现residual stack模块时,代码如下:
def residual_stack(Xm,kennel_size,Seq,pool_size):
#1*1 Conv Linear
Xm = Conv2D(32, (1, 1), padding='same', name=Seq+"_conv1", kernel_initializer='glorot_normal',data_format=data_format)(Xm)
#Residual Unit 1
Xm_shortcut = Xm
Xm = Conv2D(32, kennel_size, padding='same',activation="relu",name=Seq+"_conv2", kernel_initializer='glorot_normal',data_format=data_format)(Xm)
Xm = Conv2D(32, kennel_size, padding='same', name=Seq+"_conv3", kernel_initializer='glorot_normal',data_format=data_format)(Xm)
Xm = layers.add([Xm,Xm_shortcut])
Xm = Activation("relu")(Xm)
#Residual Unit 2
Xm_shortcut = Xm
Xm = Conv2D(32, kennel_size, padding='same',activation="relu",name=Seq+"_conv4", kernel_initializer='glorot_normal',data_format=data_format)(Xm)
!!!X = Conv2D(32, kennel_size, padding='same', name=Seq+"_conv5", kernel_initializer='glorot_normal',data_format=data_format)(Xm)!!!
Xm = layers.add([Xm,Xm_shortcut])
Xm = Activation("relu")(Xm)
#MaxPooling
Xm = MaxPooling2D(pool_size=pool_size, strides=pool_size, padding='valid', data_format=data_format)(Xm)
return Xm
在我加"!!!"的语句处(即建立unit2的第3行语句中),返回值为X而不是Xm。这会导致您的Res stack模块缺少一个卷积层。这一点我在您打印出的网络结构中(summary)也得到了验证。
我不清楚您这里是有意改动,以便使得性能更好;还是无心之失。当我将X更正为Xm时性能反而有退化(学习率1e-3),因此或许您的此处改动反而可能使得性能提升?