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 相关文章推荐
flask中使用SQLAlchemy进行辅助开发的代码
Feb 10 Python
Python定时执行之Timer用法示例
May 27 Python
Python编程实现粒子群算法(PSO)详解
Nov 13 Python
详解Python核心对象类型字符串
Feb 11 Python
pip命令无法使用的解决方法
Jun 12 Python
pandas 快速处理 date_time 日期格式方法
Nov 12 Python
神经网络相关之基础概念的讲解
Dec 29 Python
Python实现二叉树的常见遍历操作总结【7种方法】
Mar 06 Python
详解用Python练习画个美队盾牌
Mar 23 Python
python对绑定事件的鼠标、按键的判断实例
Jul 17 Python
python matplotlib 画dataframe的时间序列图实例
Nov 20 Python
200行python代码实现贪吃蛇游戏
Apr 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
第十节--抽象方法和抽象类
2006/11/16 PHP
php中批量删除Mysql中相同前缀的数据表的代码
2011/07/01 PHP
php中将网址转换为超链接的函数
2011/09/02 PHP
phpmyadmin3 安装配置图解教程
2012/03/29 PHP
php实现按文件名搜索文件的远程文件查找器
2014/05/10 PHP
php实现图片等比例缩放代码
2015/07/23 PHP
php命令行(cli)模式下报require 加载路径错误的解决方法
2015/11/23 PHP
PHP使用file_get_content设置头信息的方法
2016/02/14 PHP
PHP空值检测函数与方法汇总
2017/11/19 PHP
php生成静态页面并实现预览功能
2019/06/27 PHP
javascript学习随笔(使用window和frame)的技巧
2007/03/08 Javascript
JS调试必备的5个debug技巧
2014/03/07 Javascript
node.js中的path.delimiter方法使用说明
2014/12/09 Javascript
详解Nodejs基于mongoose模块的增删改查的操作
2016/12/21 NodeJs
JS简单添加元素新节点的方法示例
2018/02/10 Javascript
JavaScript中的E-mail 地址格式验证
2018/03/28 Javascript
关于js的三种使用方式(行内js、内部js、外部js)的程序代码
2018/05/05 Javascript
javascript少儿编程关于返回值的函数内容
2018/05/27 Javascript
如何在JavaScript中谨慎使用代码注释
2019/06/21 Javascript
js使用文档就绪函数动态改变页面内容示例【innerHTML、innerText】
2019/11/07 Javascript
Vuejs通过拖动改变元素宽度实现自适应
2020/09/02 Javascript
[48:21]林俊杰圣堂刺客超神杀戮秀
2014/10/29 DOTA
Python实现的RSS阅读器实例
2015/07/25 Python
Python聚类算法之DBSACN实例分析
2015/11/20 Python
Python实现PS图像调整黑白效果示例
2018/01/25 Python
python批量处理文件或文件夹
2020/07/28 Python
Python通过VGG16模型实现图像风格转换操作详解
2020/01/16 Python
Python通过Tesseract库实现文字识别
2020/03/05 Python
经理职责范文
2013/11/08 职场文书
学生励志演讲稿
2014/01/06 职场文书
院领导写的就业推荐信
2014/03/09 职场文书
励志演讲稿500字
2014/08/21 职场文书
中学教师暑期培训方案
2014/08/27 职场文书
国庆节慰问信
2015/02/15 职场文书
同意报考公务员证明
2015/06/17 职场文书
2016大学生社会实践单位评语
2015/12/01 职场文书