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编程时利用wxPython来支持多线程的方法
Apr 07 Python
Python网络爬虫与信息提取(实例讲解)
Aug 29 Python
Python使用三种方法实现PCA算法
Dec 12 Python
Python中利用xpath解析HTML的方法
May 14 Python
python中使用zip函数出现错误的原因
Sep 28 Python
python paramiko利用sftp上传目录到远程的实例
Jan 03 Python
75条笑死人的知乎神回复,用60行代码就爬完了
May 06 Python
利用pyuic5将ui文件转换为py文件的方法
Jun 19 Python
pytest中文文档之编写断言
Sep 12 Python
Python3.7 pyodbc完美配置访问access数据库
Oct 03 Python
解决Pycharm双击图标启动不了的问题(JetBrains全家桶通用)
Aug 07 Python
Python中递归以及递归遍历目录详解
Oct 24 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
php实现12306余票查询、价格查询示例
2014/04/17 PHP
php可应用于面包屑导航的递归寻找家谱树实现方法
2015/02/02 PHP
浅谈php中的访问修饰符private、protected、public的作用范围
2016/11/20 PHP
微信公众平台开发教程④ ThinkPHP框架下微信支付功能图文详解
2019/04/10 PHP
IE6弹出“已终止操作”的解决办法
2010/11/27 Javascript
js 字符串转化成数字的代码
2011/06/29 Javascript
Firefox中beforeunload事件的实现缺陷浅析
2012/05/03 Javascript
JS常用正则表达式总结
2013/11/12 Javascript
jQuery级联操作绑定事件实例
2014/09/02 Javascript
基于jQuery实现的图片切换焦点图整理
2014/12/07 Javascript
使用jQuery和Bootstrap实现多层、自适应模态窗口
2014/12/22 Javascript
javascript表格隔行变色加鼠标移入移出及点击效果的方法
2015/04/10 Javascript
详解JavaScript的流程控制语句
2015/11/30 Javascript
javascript仿百度输入框提示自动下拉补全
2016/01/07 Javascript
Javascript防止图片拉伸的自适应处理方法
2017/12/26 Javascript
如何在vue中使用ts的示例代码
2018/02/28 Javascript
vue发送ajax请求详解
2018/10/09 Javascript
jQuery实现图片随机切换、抽奖功能(实例代码)
2019/10/23 jQuery
[02:18]DOTA2英雄基础教程 育母蜘蛛
2014/01/20 DOTA
python连接字符串的方法小结
2015/07/13 Python
简单讲解Python编程中namedtuple类的用法
2016/06/21 Python
python将字典内容存入mysql实例代码
2018/01/18 Python
Pandas中把dataframe转成array的方法
2018/04/13 Python
python2 与 python3 实现共存的方法
2018/07/12 Python
python 批量解压压缩文件的实例代码
2019/06/27 Python
Python箱型图绘制与特征值获取过程解析
2019/10/22 Python
Python tcp传输代码实例解析
2020/03/18 Python
荷兰的时尚市场:To Be Dressed
2019/05/06 全球购物
主题婚礼策划方案
2014/02/10 职场文书
个人培训自我鉴定
2014/03/28 职场文书
小学生感恩父母演讲稿
2014/08/28 职场文书
个人求职自荐信范文
2015/03/06 职场文书
五星级酒店前台接待岗位职责
2015/04/02 职场文书
2015年学校政教处工作总结
2015/05/26 职场文书
终止合同协议书范本
2016/03/22 职场文书
mysql序号rownum行号实现方式
2022/12/24 MySQL