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)

     

     

     

     

     

     

     

  • 相关阅读:
    android bluetooth 蓝牙4.0 +HC-08模块
    android 调用默认浏览器 打开指定网页
    checkSelfPermission 找不到 Android 动态权限问题
    C# 使用 USB转串 接收数据 问题
    Mysql 保留最新的10条数据
    Android Fragment 开发(一)
    python IP地址转16进制
    Android Socket 遇到的Soure Not Find 错误
    Linux 修改时区 不用重启
    XML Publisher 并发程序由于 输出提交处理程序提交失败
  • 原文地址:https://www.cnblogs.com/wzdLY/p/9710478.html
Copyright © 2011-2022 走看看