Keras 中Leaky ReLU等高级激活函数的用法


Posted in Python onJuly 05, 2020

在用Keras来实现CNN等一系列网络时,我们经常用ReLU作为激活函数,一般写法如下:

from keras import layers
from keras import models
 
model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1))) 
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu')) 
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))

上面这段代码实现了一个基本的卷积神经网络,用ReLU作为激活函数,关于ReLU具体内容不做详细介绍。还有一些常用的主流激活函数:

softmax: 在多分类中常用的激活函数,是基于逻辑回归的。

Softplus:softplus(x)=log(1+e^x),近似生物神经激活函数,最近出现的。

Relu:近似生物神经激活函数,最近出现的。

tanh:双曲正切激活函数,也是很常用的。

sigmoid:S型曲线激活函数,最常用的。

hard_sigmoid:基于S型激活函数。

linear:线性激活函数,最简单的。

主流的激活函数可以如上述例子一样通过名称直接使用,但是还有一些复杂的激活函数如:Leaky ReLU、PReLU是不可以这样直接使用的,必须使用add方法将高级激活函数作为层(layer)来使用,举例如下:

from keras import layers
from keras import models
from keras.layers import LeakyReLU
 
model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), input_shape=(28, 28, 1)))
model.add(LeakyReLU(alpha=0.05))
model.add(layers.MaxPooling2D((2, 2))) 
 
model.add(layers.Conv2D(64, (3, 3))) 
model.add(LeakyReLU(alpha=0.05))
model.add(layers.MaxPooling2D((2, 2)))
 
model.add(layers.Conv2D(64, (3, 3))
model.add(LeakyReLU(alpha=0.05))

这里我们在卷积层中去掉激活函数的参数,并在卷积层后加入高级激活层,下面来测试:

>>model.summary()

Keras 中Leaky ReLU等高级激活函数的用法

这里从整个网络结构的结果可以看出,卷积层后确实加入了一层新的激活层,使用的是LeakyReLU函数。

补充知识:Keras 调用leaky_relu

Keras 中有leaky_relu的实现。leaky_relu被整合进了relu函数。

参考官方文档:

https://tensorflow.google.cn/api_docs/python/tf/keras/backend/relu?hl=en

Arguments
x A tensor or variable.
alpha A scalar, slope of negative section (default=0.).
max_value float. Saturation threshold.
threshold float. Threshold value for thresholded activation.

alpha(超参数)值控制负数部分线性函数的梯度。当alpha = 0 ,是原始的relu函数。当alpha >0,即为leaky_relu。

查看源码,在Keras.backbend 中,也是调用tensorflow.python.ops库nn中的leaky_relu函数实现的:

def relu(x, alpha=0., max_value=None, threshold=0):
 """Rectified linear unit.
 With default values, it returns element-wise `max(x, 0)`.
 Otherwise, it follows:
 `f(x) = max_value` for `x >= max_value`,
 `f(x) = x` for `threshold <= x < max_value`,
 `f(x) = alpha * (x - threshold)` otherwise.
 Arguments:
   x: A tensor or variable.
   alpha: A scalar, slope of negative section (default=`0.`).
   max_value: float. Saturation threshold.
   threshold: float. Threshold value for thresholded activation.
 Returns:
   A tensor.
 """

 if alpha != 0.:
  if max_value is None and threshold == 0:
   return nn.leaky_relu(x, alpha=alpha)  ##在这里调用了leaky_relu

  if threshold != 0:
   negative_part = nn.relu(-x + threshold)
  else:
   negative_part = nn.relu(-x)

 clip_max = max_value is not None

 if threshold != 0:
  # computes x for x > threshold else 0
  x = x * math_ops.cast(math_ops.greater(x, threshold), floatx())
 elif max_value == 6:
  # if no threshold, then can use nn.relu6 native TF op for performance
  x = nn.relu6(x)
  clip_max = False
 else:
  x = nn.relu(x)

 if clip_max:
  max_value = _constant_to_tensor(max_value, x.dtype.base_dtype)
  zero = _constant_to_tensor(0, x.dtype.base_dtype)
  x = clip_ops.clip_by_value(x, zero, max_value)

 if alpha != 0.:
  alpha = _to_tensor(alpha, x.dtype.base_dtype)
  x -= alpha * negative_part
 return x

以上这篇Keras 中Leaky ReLU等高级激活函数的用法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
如何将python中的List转化成dictionary
Aug 15 Python
Python学习pygal绘制线图代码分享
Dec 09 Python
python 实时得到cpu和内存的使用情况方法
Jun 11 Python
python发送告警邮件脚本
Sep 17 Python
python协程之动态添加任务的方法
Feb 19 Python
在windows下使用python进行串口通讯的方法
Jul 02 Python
python fuzzywuzzy模块模糊字符串匹配详细用法
Aug 29 Python
用Python画一个LinkinPark的logo代码实例
Sep 10 Python
使用pandas 将DataFrame转化成dict
Dec 10 Python
python如何通过twisted搭建socket服务
Feb 03 Python
Python实例方法、类方法、静态方法区别详解
Sep 05 Python
pandas按条件筛选数据的实现
Feb 20 Python
Django --Xadmin 判断登录者身份实例
Jul 03 #Python
详解Python多线程下的list
Jul 03 #Python
Python 字符串池化的前提
Jul 03 #Python
Pycharm打开已有项目配置python环境的方法
Jul 03 #Python
使用Dajngo 通过代码添加xadmin用户和权限(组)
Jul 03 #Python
windows支持哪个版本的python
Jul 03 #Python
Django Form设置文本框为readonly操作
Jul 03 #Python
You might like
收音机发烧友应当熟知的100条知识
2021/03/02 无线电
phpmyadmin操作流程
2006/10/09 PHP
PHP页面间传递参数实例代码
2008/06/05 PHP
php判断输入是否是纯数字,英文,汉字的方法
2015/03/05 PHP
Laravel 5.4向IoC容器中添加自定义类的方法示例
2017/08/15 PHP
一个判断email合法性的函数[非正则]
2008/12/09 Javascript
通用javascript脚本函数库 方便开发
2009/10/13 Javascript
javascript通过className来获取元素的简单示例代码
2014/01/10 Javascript
javascript间隔定时器(延时定时器)学习 间隔调用和延时调用
2014/01/13 Javascript
JS实现上下左右对称的九九乘法表
2016/02/22 Javascript
微信小程序 页面传值详解
2017/03/10 Javascript
vue使用stompjs实现mqtt消息推送通知
2017/06/22 Javascript
详解JavaScript中的数组合并方法和对象合并方法
2018/05/11 Javascript
vue form check 表单验证的实现代码
2018/12/09 Javascript
详解async/await 异步应用的常用场景
2019/05/13 Javascript
vue仿淘宝滑动验证码功能(样式模仿)
2019/12/10 Javascript
JavaScript实现简单日历效果
2020/09/11 Javascript
[37:45]完美世界DOTA2联赛PWL S3 LBZS vs Phoenix 第二场 12.09
2020/12/11 DOTA
基于python yield机制的异步操作同步化编程模型
2016/03/18 Python
python中pytest收集用例规则与运行指定用例详解
2019/06/27 Python
python+logging+yaml实现日志分割
2019/07/22 Python
超简单的Python HTTP服务
2019/07/22 Python
详解Python Matplotlib解决绘图X轴值不按数组排序问题
2019/08/05 Python
Python OpenCV读取显示视频的方法示例
2020/02/20 Python
python利用递归方法实现求集合的幂集
2020/09/07 Python
HTML5+WebSocket实现多文件同时上传的实例
2016/12/29 HTML / CSS
Marc Jacobs官方网站:美国奢侈品牌
2017/08/29 全球购物
万户网络JAVA程序员岗位招聘笔试试卷
2013/01/08 面试题
供货协议书
2014/04/22 职场文书
学校端午节活动方案
2014/08/23 职场文书
九一八事变演讲稿
2014/09/05 职场文书
2014年乡镇党建工作总结
2014/11/11 职场文书
2015年商场工作总结
2015/04/27 职场文书
2019学生会干事辞职信
2019/06/27 职场文书
教师节作文之小学四年级
2019/09/03 职场文书
解决jupyter notebook图片显示模糊和保存清晰图片的操作
2021/04/24 Python