稠密连接网络(DenseNet) 讨论区

http://zh.diveintodeeplearning.org/chapter_convolutional-neural-networks/densenet.html

因为DenseNet相比于ResNet,filter的数量更少啊。

这里是不是存在打字错误,应该是"输入为"

// last layers
nn.AvgPool2D(pool_size=1)

最后一层设置 pool_size=1,应该和没有设置是一样的吧?

沐神,Dense Block里面的卷积层少了1*1卷积吧?
2017-11-22 20:20:51屏幕截图

我数了半天发现都凑不够121层 :joy:

def dense_net():
     ...
        # dense blocks
        channels = init_channels
        for i, layers in enumerate(block_layers):
            net.add(DenseBlock(layers, growth_rate))
            channels += layers * growth_rate
            if i != len(block_layers)-1:
                net.add(transition_block(channels//2))
      ...
    return net

dense_net()定义里的channels有点困惑。transition block会对dense block的输出通道进行减半,那下一层的dense block的输入通道数应该是上一层dense block输出通道数的一半。但是代码里面的变量channels是一直递增的,似乎没有考虑到transition block对通道所做的降维作用。

你好像没有理解稠密块的作用,它用了concat,把输入channel,中间层channel,结尾channel一起concat,所以out的channel会很大,这里即使用了过渡层1*1卷积进行减半降维,channel维数也是不断递增的,这样可以理解吗

原论文中一个dense block是由1x1的conv+3x3的conv

嗯,是呀,我就是对照论文,又仔细算了下层数,教程里面写的是121层,实际每个dense block 少了一个1*1 卷积

貌似DenseNet挺吃记忆体,不过似乎有可以减少记忆体使用的方式:Memory-Efficient Implementation of DenseNets

想请教各位这篇否已经有人在MXNET/Gluon上实现了?或是有人能提示我一下如何将其在MXNET/Gluon实现?(原作者貌似是使用LuaTorch/ PyTorch)

这个模型在gluon model zoo里有,但是目前没有用省内存的方法实现,会考虑改进

是的 我也觉得channel忘记/=2了

+1认为channel忘记除2了。

去查了下keras.applications.densenet里写的,transition_block里先获取了输入的channels的值,再将内部的1 x 1卷积的通道数设置为channels // 2(不过keras的实现里是设置了一个reduction比率,但是取值一直是0.5)。

论文中最后是用了Global Avg Pooling,这里只是用了普通的Avg Pooling?

教程实现过程中几乎没有定义forward函数,只有DenseBlock里有forward, 其他地方都没有.是其他layer都自带默认的forward吗?

的确如此,如果像文档描述的过滤层是将通道减半的话,是应该是把channels//2赋值回channels,不然不是减半,而是比减半多一点,不过也是可跑的通的,延迟初始化就起作用了,最后还是能够到10分类。

到最后宽和高都是1x1,那么Global Avg Pooling和Avg Pooling就没啥区别了

1赞

请问原文中 121 层是怎么计算得到的,我看了好久也没发现有121层?

mxnet.base.MXNetError: Error in operator conv10_fwd: [21:00:24] c:\projects\mxnet-distro-win\mxnet-build\src\operator./convolution-inl.h:492: Check failed: dshp.ndim() == 4U (2 vs. 4) Input data should be 4D in batch-num_filter-y-x

请问这个错误遇见过吗