如何将Mish函数用到深度学习算法中

简介: 如何将Mish函数用到深度学习算法中

目录


摘要


如何在Pytorch使用Mish函数


如何在Keras中使用Mish激活函数。


摘要

Diganta Misra的一篇题为“Mish: A Self Regularized Non-Monotonic Neural Activation Function”的新论文介绍了一个新的深度学习激活函数,该函数在最终准确度上比Swish(+.494%)和ReLU(+ 1.671%)都有提高


公式如下:

image.jpeg

  • 何在Pytorch使用Mish函数

定义Mish函数。

class Mish(torch.nn.Module):
    def __init__(self):
        super().__init__()
    def forward(self, x):
        x = x * (torch.tanh(torch.nn.functional.softplus(x)))
        return x

调用函数:

class Path1_64(nn.Module):
    def __init__(self):
        super().__init__()
        self.conv1 = ConvBN(32, 64, 3)
        self.conv2 = ConvBN(64, 64, [1, 9])
        self.conv3 = ConvBN(64, 64, [9, 1])
        self.conv4 = ConvBN(64, 64, 1)
        self.resBlock = ResBlock(ch=64, nblocks=2)
        self.conv5 = ConvBN(64, 64, [1, 7])
        self.conv6 = ConvBN(64, 64, [7, 1])
        self.conv7 = ConvBN(64, 64, 1)
        self.relu = Mish()
    def forward(self, input):
        x1 = self.conv1(input)
        x2 = self.conv2(x1)
        x3 = self.conv3(x2)
        x4 = self.conv4(x3)
        r1 = self.resBlock(x4)
        x5 = self.conv5(r1)
        x6 = self.conv6(x5)
        x7 = self.conv7(x6)
        x7 = self.relu(x7 + x4)
        return x7

调用Mish激活函数和调用其他的激活函数一样,直接调用即可。

  • 如何在Keras中使用Mish激活函数。

定义Mish激活函数

import tensorflow as tf
from tensorflow.python.keras.layers import *
from tensorflow.keras.layers import Activation
from tensorflow.keras.utils import get_custom_objects
class Mish(Activation):
    def __init__(self, activation, **kwargs):
        super(Mish, self).__init__(activation, **kwargs)
        self.__name__ = 'Mish'
def mish(inputs):
    return inputs * tf.math.tanh(tf.math.softplus(inputs))
get_custom_objects().update({'Mish': Mish(mish)})

调用激活函数:

def bn_prelu(x):

 

   x = BatchNormalization(epsilon=1e-5)(x)

 

   x = Activation('Mish')(x)

 

   return x

 

def build_model(out_dims, input_shape=(100, 100, 3)):

 

   inputs_dim = Input(input_shape)

 

   x = Conv2D(32, (3, 3), strides=(2, 2), padding='same')(inputs_dim)

 

   x = bn_prelu(x)

 

   x = Conv2D(32, (3, 3), strides=(1, 1), padding='same')(x)

 

   x = bn_prelu(x)

 

   x = MaxPooling2D(pool_size=(2, 2))(x)

 

   x = Conv2D(64, (3, 3), strides=(1, 1), padding='same')(x)

 

   x = bn_prelu(x)

 

   x = Conv2D(64, (3, 3), strides=(1, 1), padding='same')(x)

 

   x = bn_prelu(x)

 

   x = MaxPooling2D(pool_size=(2, 2))(x)

 

   x = Conv2D(128, (3, 3), strides=(1, 1), padding='same')(x)

 

   x = bn_prelu(x)

 

   x = Conv2D(128, (3, 3), strides=(1, 1), padding='same')(x)

 

   x = bn_prelu(x)

 

   x = MaxPooling2D(pool_size=(2, 2))(x)

 

   x = Conv2D(256, (3, 3), strides=(1, 1), padding='same')(x)

 

   x = bn_prelu(x)

 

   x = Conv2D(256, (3, 3), strides=(1, 1), padding='same')(x)

 

   x = bn_prelu(x)

 

   x = GlobalAveragePooling2D()(x)

 

   dp_1 = Dropout(0.5)(x)

 

   fc2 = Dense(out_dims)(dp_1)

 

   fc2 = Activation('softmax')(fc2)  # 此处注意,为sigmoid函数

 

   model = Model(inputs=inputs_dim, outputs=fc2)

 

   return model

 

 

 

model = build_model(2)  # 生成模型

 

optimizer = Adam(lr=1e-3)  # 加入优化器,设置优化器的学习率。

 

model.compile(optimizer=optimizer, loss='sparse_categorical_crossentropy', metrics=['accuracy'])

目录
相关文章
|
1天前
|
机器学习/深度学习 人工智能 算法
猫狗宠物识别系统Python+TensorFlow+人工智能+深度学习+卷积网络算法
宠物识别系统使用Python和TensorFlow搭建卷积神经网络,基于37种常见猫狗数据集训练高精度模型,并保存为h5格式。通过Django框架搭建Web平台,用户上传宠物图片即可识别其名称,提供便捷的宠物识别服务。
87 55
|
17天前
|
搜索推荐 Python
利用Python内置函数实现的冒泡排序算法
在上述代码中,`bubble_sort` 函数接受一个列表 `arr` 作为输入。通过两层循环,外层循环控制排序的轮数,内层循环用于比较相邻的元素并进行交换。如果前一个元素大于后一个元素,就将它们交换位置。
119 67
|
11天前
|
机器学习/深度学习 人工智能 算法
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【'阿比西尼亚猫(Abyssinian)', '孟加拉猫(Bengal)', '暹罗猫(Birman)', '孟买猫(Bombay)', '英国短毛猫(British Shorthair)', '埃及猫(Egyptian Mau)', '缅因猫(Maine Coon)', '波斯猫(Persian)', '布偶猫(Ragdoll)', '俄罗斯蓝猫(Russian Blue)', '暹罗猫(Siamese)', '斯芬克斯猫(Sphynx)', '美国斗牛犬
77 29
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
|
5天前
|
机器学习/深度学习 算法 信息无障碍
基于GoogleNet深度学习网络的手语识别算法matlab仿真
本项目展示了基于GoogleNet的深度学习手语识别算法,使用Matlab2022a实现。通过卷积神经网络(CNN)识别手语手势,如"How are you"、"I am fine"、"I love you"等。核心在于Inception模块,通过多尺度处理和1x1卷积减少计算量,提高效率。项目附带完整代码及操作视频。
|
8天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于深度学习网络的宝石类型识别算法matlab仿真
本项目利用GoogLeNet深度学习网络进行宝石类型识别,实验包括收集多类宝石图像数据集并按7:1:2比例划分。使用Matlab2022a实现算法,提供含中文注释的完整代码及操作视频。GoogLeNet通过其独特的Inception模块,结合数据增强、学习率调整和正则化等优化手段,有效提升了宝石识别的准确性和效率。
|
20天前
|
机器学习/深度学习 自然语言处理 语音技术
深入探索深度学习中的兼容性函数:从原理到实践
深入探索深度学习中的兼容性函数:从原理到实践
32 3
|
20天前
|
机器学习/深度学习 自然语言处理 语音技术
揭秘深度学习中的兼容性函数:原理、类型与应用
揭秘深度学习中的兼容性函数:原理、类型与应用
|
20天前
|
机器学习/深度学习 自然语言处理 语音技术
揭秘深度学习中的注意力机制:兼容性函数的深度解析
揭秘深度学习中的注意力机制:兼容性函数的深度解析
|
29天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
垃圾识别分类系统。本系统采用Python作为主要编程语言,通过收集了5种常见的垃圾数据集('塑料', '玻璃', '纸张', '纸板', '金属'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对图像数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。然后使用Django搭建Web网页端可视化操作界面,实现用户在网页端上传一张垃圾图片识别其名称。
75 0
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
|
20天前
|
机器学习/深度学习 自然语言处理 语音技术
探索深度学习中的兼容性函数:构建高效注意力机制的基石
探索深度学习中的兼容性函数:构建高效注意力机制的基石
27 0