densenet比resnet参数量少,但训练速度慢的原因分析

    笔者做一个四分类的模型,发现了一个非常有意思的问题,就是训练好的densenet的h5模型只有1.3M的参数量,而resnet50的参数量有271M之多,但是训练的速度竟然是densenet更慢,笔者很迷惑,所以就查找了一些资料并对网络结构进行分析,做一下记录,供大家参考。

首先我查找了一些资料,进行分析,毕竟要先知道网络速度的快慢和啥有关对吧,参考如下博客,

https://blog.csdn.net/leayc/article/details/81001801

然后我把自己的densenet和resnent的模型打印出来,model.summery()得到了两个模型的结构,下面是densenet的(没截全,只取了一开始和结尾部分):

densenet比resnet参数量少,但训练速度慢的原因分析_第1张图片densenet比resnet参数量少,但训练速度慢的原因分析_第2张图片

下面是resnet的(同样只是一开始和结尾部分):

densenet比resnet参数量少,但训练速度慢的原因分析_第3张图片densenet比resnet参数量少,但训练速度慢的原因分析_第4张图片

通过对比可以发现densenet比resnet参数少的原因在于每一次卷积输入输出的chanenl个数要比resnet少很多,这样bn层的参数也会少很多,channel数对此的影响很大,全连接层的参数也比resnet少很多;densenet比resnet慢的原因在于,densenet的featuremap比resnet大很多,导致卷积过程的计算量比resnet大很多,简而言之就是flops要大一些,内存的占用要大一些,而且内存的访问次数要多很多,内存的访问是很慢的,可以参考上面的那个连接里面讲解的,而不是全连接层的原因,因为densenet的全连接参数比resnet要少很多。

分析完原因以后,又看了一篇博客,上面正好有相关的参数实验,https://blog.csdn.net/u011311291/article/details/82969409

里面涉及到vgg16及densenet201的参数和内存的消耗,虽然我自己没有动手实验自己的网络,但是从侧面已经验证了我的猜想。

 

你可能感兴趣的:(deep,learning)