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 相关文章推荐
Windows下Python2与Python3两个版本共存的方法详解
Feb 12 Python
关于Python 3中print函数的换行详解
Aug 08 Python
Python算法输出1-9数组形成的结果为100的所有运算式
Nov 03 Python
Python切片索引用法示例
May 15 Python
python删除文本中行数标签的方法
May 31 Python
Python爬虫框架Scrapy常用命令总结
Jul 26 Python
Python实现随机创建电话号码的方法示例
Dec 07 Python
Python从数据库读取大量数据批量写入文件的方法
Dec 10 Python
浅谈Python中的可迭代对象、迭代器、For循环工作机制、生成器
Mar 11 Python
python爬虫之自制英汉字典
Jun 24 Python
Pandas0.25来了千万别错过这10大好用的新功能
Aug 07 Python
Numpy之reshape()使用详解
Dec 26 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+XML 制作简单的留言本 图文教程
2009/11/02 PHP
php恢复数组的key为数字序列的方法
2015/04/28 PHP
phalcon框架使用指南
2016/02/23 PHP
Laravel核心解读之异常处理的实践过程
2019/02/24 PHP
[IE&amp;FireFox兼容]JS对select操作
2007/01/07 Javascript
javascript网页关键字高亮代码
2008/07/30 Javascript
jquery仿QQ商城带左右按钮控制焦点图片切换滚动效果
2013/06/27 Javascript
JS操作JSON要领详细总结
2013/08/25 Javascript
js实现可拖动DIV的方法
2013/12/17 Javascript
使用javascript实现雪花飘落的效果
2015/01/13 Javascript
jQuery EasyUI编辑DataGrid用combobox实现多级联动
2016/08/29 Javascript
js中通过getElementsByName访问name集合对象的方法
2016/10/31 Javascript
微信小程序入门教程
2016/11/18 Javascript
JavaScript获取键盘按键的键码(参照表)
2017/01/10 Javascript
gulp加批处理(.bat)实现ng多应用一键自动化构建
2017/02/16 Javascript
webpack优化的深入理解
2018/12/10 Javascript
微信小程序实现商城倒计时
2020/11/01 Javascript
jquery实现异步文件上传ajaxfileupload.js
2020/10/23 jQuery
python双向链表实现实例代码
2013/11/21 Python
Python3之简单搭建自带服务器的实例讲解
2018/06/04 Python
Python使用jsonpath-rw模块处理Json对象操作示例
2018/07/31 Python
深入浅析Python中list的复制及深拷贝与浅拷贝
2018/09/03 Python
python中退出多层循环的方法
2018/11/27 Python
python 读取竖线分隔符的文本方法
2018/12/20 Python
pyqt5实现绘制ui,列表窗口,滚动窗口显示图片的方法
2019/06/20 Python
python如何解析配置文件并应用到项目中
2019/06/27 Python
python利用wx实现界面按钮和按钮监听和字体改变的方法
2019/07/17 Python
django项目环境搭建及在虚拟机本地创建django项目的教程
2019/08/02 Python
Python Selenium截图功能实现代码
2020/04/26 Python
Python局部变量与全局变量区别原理解析
2020/07/14 Python
CK巴西官方网站:Calvin Klein巴西
2019/07/19 全球购物
安全生产先进个人材料
2014/02/06 职场文书
趣味运动会开幕词
2015/01/28 职场文书
个人工作决心书
2015/09/22 职场文书
Spring Cloud Gateway去掉url前缀
2021/07/15 Java/Android
MySQL外键约束(Foreign Key)案例详解
2022/06/28 MySQL