• 激活函数sigmoid、tanh、relu、Swish


    激活函数的作用主要是引入非线性因素,解决线性模型表达能力不足的缺陷

      sigmoid函数可以从图像中看出,当x向两端走的时候,y值越来越接近1和-1,这种现象称为饱和,饱和意味着当x=100和x=1000的映射结果是一样的,这种转化相当于将1000大于100的信息丢失了很多,所以一般需要归一化数据。

     

     

    softplus函数相比于relu函数更加平滑,会保存部分小于零的函数,但是计算量也更大了。

      relu函数在信号响应上有很多优势,但是仅仅在正向传播中,由于其对负值全部舍去很容易使模型输出全零而无法训练。例如:随机初始化的w中存在负值,其对应的正值输入特征也就被全部屏蔽了,同理对应的负值输入反而被激活了。因此,一些relu变种被开发,此处不详细讲解。

    Swish是谷歌公司发现一个效果更优于relu的激活函数:

    神经网络激活函数总结:

      tanh函数适用于特征相差明显时的效果会很好,在循环中会不断扩大特征效果并将其显示出来。但当特征之间相差比较复杂没有明显的区别,或者特征间的相差不是特别大需要细微的分类判断时,sigmoid函数的效果会更好。relu函数的优势在于经过处理后的数据具有很好的稀疏性。

    keras中自定义激活函数:

    from keras import backend as K
    from keras.models import Sequential,Model
    from keras.layers import Dense
    import numpy as np
    
    def Swish(x):
        return x*K.sigmoid(1.0*x)
    
    model = Sequential()
    model.add(Dense(32,activation="relu",input_dim=100))
    model.add(Dense(16,activation="relu",name="Dense_1"))
    model.add(Dense(1, activation=Swish,name="Dense_2"))
    model.compile(optimizer
    ='rmsprop',loss='binary_crossentropy',metrics=['accuracy']) #假设训练和测试使用同一组数据 data = np.random.random((1000, 100)) labels = np.random.randint(2, size=(1000, 1)) model.fit(data,labels,epochs=10,batch_size=32) model.predict(data)

     

     

     

     

     

     

     

  • 相关阅读:
    【181】IDL 代码从 Windows 转移到 Linux
    异步加载图片到GridView上,防止OOM
    10881
    AngularJS的开发工具---yeoman 简易安装
    AIX操作oracle
    hdu2817 A sequence of numbers
    FZU 2104 (13.11.28)
    HDU 1231 (13.12.2)
    Java 23种设计模式详尽分析与实例解析之一--创建型模式
    JSP视频
  • 原文地址:https://www.cnblogs.com/wzdLY/p/9710478.html
Copyright © 2020-2023  润新知