自己写的mobilenet v2不工作。

自己写了一个简单的mobilenet V2版本,就是不工作,train acc一直不上升。
代码如下

class iconv(nn.HybridBlock):
    def __init__(self,inch,outch,stride,**kwargs):
        super(iconv,self).__init__(**kwargs)
        self.c1=nn.Conv2D(inch*4,kernel_size=1,padding=0)
        self.c2=nn.Conv2D(inch*4,kernel_size=3,padding=1,strides=stride,groups=4*inch)
        self.c3=nn.Conv2D(outch,kernel_size=1,padding=0)

    def hybrid_forward(self,F,X):
        y=F.relu(self.c1(X))
        y=F.relu(self.c2(y))
        y=self.c3(y)
        return y

class mymodel(nn.HybridBlock):
    def __init__(self,**kwargs):
        super(mymodel,self).__init__(**kwargs)
        self.c1=iconv(1,16,2)
        self.c2=iconv(16,32,2)
        self.c3=iconv(32,64,1)
        self.c4=iconv(64,128,1)
        self.c5=iconv(128,256,1)
        self.p=nn.GlobalAvgPool2D()
        self.c6=nn.Dense(10)

    def hybrid_forward(self,F,X):
        y=self.c1(X)
        y=self.c2(y)
        y=self.c3(y)
        y=self.c4(y)
        y=self.c5(y)
        y=self.p(y)
        y=self.c6(y)
        return y

用这个网络替换掉kaggle-gluon-cifar10.ipynb 中的resnet18,就得不到正确的结果了。lr改为0.0003, 用adam优化器。 resnet18是正常工作的。

把网络改成扁平的,好像就没问题。

class mymodel2(nn.HybridBlock):
    def __init__(self,**kwargs):
        super(mymodel2,self).__init__(**kwargs)
        self.c1=nn.Conv2D(32,kernel_size=1,padding=0,use_bias=False)
        self.c2=nn.Conv2D(64,kernel_size=3,padding=1,strides=2,groups=32,use_bias=False)
        self.c3=nn.Conv2D(128,kernel_size=3,padding=0,use_bias=False)
        self.c4=nn.Conv2D(128,kernel_size=1,padding=0,use_bias=False)
        self.c5=nn.Conv2D(128,kernel_size=3,padding=1,strides=2,groups=128,use_bias=False)
        self.c6=nn.Conv2D(256,kernel_size=3,padding=0,use_bias=False)
        self.p=nn.GlobalAvgPool2D()
        self.c7=nn.Dense(10,use_bias=False)

    def hybrid_forward(self,F,x):
        y=F.relu(self.c1(x))
        y=F.relu(self.c2(y))
        y=self.c3(y)
        
        y=F.relu(self.c4(y))
        y=F.relu(self.c5(y))
        y=self.c6(y)
        y=self.c7(self.p(y))
        return y
1赞

您好,我想把DenseNet的普通卷积换成深度可分离,我想和您请教一下如何在mxnet里实现深度可分离卷积?