Swish & hard-Swish

Swish & hard-Swish_第1张图片
当β = 0时,Swish变为线性函数f(x)=x/2
β → ∞, σ(x)=(1+exp(−x))−1σ(x)=(1+exp⁡(−x))−1为0或1. Swish变为ReLU: f(x)=2max(0,x)
所以Swish函数可以看做是介于线性函数与ReLU函数之间的平滑函数. beta是个常数或者可以训练的参数。其具有无上界有下界、平滑、非单调的特性。其在模型效果上优于ReLU。
Swish & hard-Swish_第2张图片
Swish & hard-Swish_第3张图片
hard-Swish介绍
虽然这种Swish非线性提高了精度,但是在嵌入式环境中,他的成本是非零的,因为在移动设备上计算sigmoid函数代价要大得多。
MobileNetV3 作者使用hard-Swish和hard-Sigmoid替换了ReLU6和SE-block中的Sigmoid层,但是只是在网络的后半段才将ReLU6替换为h-Swish,因为作者发现Swish函数只有在更深的网络层使用才能体现其优势。
在这里插入图片描述
Swish & hard-Swish_第4张图片
Swish & hard-Swish_第5张图片

def _relu6(self, x):
      
      
        
                """Relu 6
      
      
        
                """
      
      
        
                return K.relu(x, max_value=6.0)
      
      
        
        

      
      
        
            def _hard_swish(self, x):
      
      
        
                """Hard swish
      
      
        
                """
      
      

                return x * K.relu(x + 3.0, max_value=6.0) / 6.0

你可能感兴趣的:(AI,python)