DenseNet神经网络简介与代码实战

1.介绍

    DenseNet模型,它的基本思路与ResNet一致,但是它建立的是前面所有层与后面层的密集连接(dense connection),它的名称也是由此而来。DenseNet的另一大特色是通过特征在channel上的连接来实现特征重用(feature reuse)。这些特点让DenseNet在参数和计算成本更少的情形下实现比ResNet更优的性能,DenseNet也因此斩获CVPR 2017的最佳论文奖

 

2.模型结构

DenseNet神经网络简介与代码实战_第1张图片

                                   A 5-layer dense block

                                          A deep DenseNet with three dense blocks

 

3.模型特点

    DenseNet具有以下两个明显的优点, 加强了feature的传递 ;更有效地利用了feature ;它与ResNet主要区别,可以通过一下两个公式来表现:

(ResNet,相加)

(DensNet,特征并联)

 

4.代码实现 keras

"""
论文原文中提出使用1*1卷积核的卷积层作为bottleneck层来优化计算效率
"""
def DenseLayer(x, nb_filter, bn_size=4, drop_rate=0.2):
    x = BatchNormalization(axis=3)(x)
    x = Activation('relu')(x)
    x = Conv2D(bn_size * nb_filter, (1, 1), strides=(1, 1), padding='same')(x)

    x = BatchNormalization(axis=3)(x)
    x = Activation('relu')(x)
    x = Conv2D(nb_filter, (3, 3), strides=(1, 1), padding='same')(x)

    if drop_rate: x = Dropout(drop_rate)(x)

    return x

""""
如论文中所述,将每一个Dense层的输出与其输入融合之后作为下一Dense层的输入,来实现密集连接
"""
def DenseBlock(x, nb_layers, growth_rate, drop_rate=0.2):
    for ii in range(nb_layers):
        conv = DenseLayer(x, nb_filter=growth_rate, drop_rate=drop_rate)
        x = concatenate([x, conv], axis=3)

    return x 

 

你可能感兴趣的:(深度学习CNN基本模型,深度学习CNN基本模型)