efficientnet实现

SE block两种实现方式

efficient内实现:
efficientnet实现
forward:
efficientnet实现
resnet中实现:
efficientnet实现
forward:
efficientnet实现

drop_connect实现

efficientnet实现
efficientnet实现

关于Swish的实现(未理解):

两种实现对memory的影响不太清楚
efficientnet实现

MBConvBlock:

efficientnet实现
efficientnet实现
加快速度的想法:当drop_connect时,前面所做的计算全部归0,这时前面的计算就浪费了,可以将drop_connect的操作移动到①处, 但是如果使用原drop_connect函数,它仅仅是将drop掉的归0,所以在后面仍然会进行计算,而且计算中会让值不为0,drop_connect失效。另一实现方式:在①处进行判断,若为1,进行下面的计算,若为0,则直接返回inputs。但是,在原实现方法中,一个batch中的不同样本会有不同的情况,即在同一个batch中,对于同一个block,可能第一个样本会drop掉这个block,但第二个样本可能不会drop掉这个样本。但在我的实现想法中,整个batch中的样本drop掉的block是一样的,尚不清楚这个会有什么影响。实现如下:
efficientnet实现