zoukankan      html  css  js  c++  java
  • 激活函数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)

     

     

     

     

     

     

     

  • 相关阅读:
    day14(xml 编写及解析)
    day11(多线程,唤醒机制,生产消费者模式,多线程的生命周期)
    day13(反射,BeanUtils包)
    day10(IO流汇总)
    day08(File类 ,字节流)
    day08(异常处理,创建异常,finally,throws和throw的区别)
    [SPOJ-PT07J] Query on tree III (主席树)
    [ZJOI2008] 树的统计(树链剖分)
    长链剖分学习笔记
    [BZOJ4260] Codechef REBXOR (01字典树,异或前缀和)
  • 原文地址:https://www.cnblogs.com/wzdLY/p/9710478.html
Copyright © 2011-2022 走看看