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中关于中文编码问题的处理建议
Apr 08 Python
Python打印scrapy蜘蛛抓取树结构的方法
Apr 08 Python
python基于pyDes库实现des加密的方法
Apr 29 Python
python实现朴素贝叶斯分类器
Mar 28 Python
Python3实现计算两个数组的交集算法示例
Apr 03 Python
详解Python用户登录接口的方法
Apr 17 Python
python多线程http压力测试脚本
Jun 25 Python
python中eval与int的区别浅析
Aug 11 Python
python 循环数据赋值实例
Dec 02 Python
记一次Django响应超慢的解决过程
Sep 17 Python
Python如何使用ElementTree解析xml
Oct 12 Python
Python列表的深复制和浅复制示例详解
Feb 12 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
4月1日重磅发布!《星际争霸II》6.0.0版本更新
2020/04/09 星际争霸
解析mysql中UNIX_TIMESTAMP()函数与php中time()函数的区别
2013/06/24 PHP
php中url传递中文字符,特殊危险字符的解决方法
2013/08/17 PHP
destoon实现调用自增数字从1开始的方法
2014/08/21 PHP
php正则表达式学习笔记
2015/11/13 PHP
经常用到的JavasScript事件的翻译
2007/04/09 Javascript
javascript闭包的理解和实例
2010/08/12 Javascript
基于JQuery的6个Tab选项卡插件
2010/09/03 Javascript
JavaScript中的稀疏数组与密集数组[译]
2012/09/17 Javascript
24款热门实用的jQuery插件推荐
2014/12/24 Javascript
js实现文字滚动效果
2016/03/03 Javascript
JavaScript计算值然后把值嵌入到html中的实现方法
2016/10/29 Javascript
AngularJS指令用法详解
2016/11/02 Javascript
javascript判断元素存在和判断元素存在于实时的dom中的方法
2017/01/17 Javascript
Canvas实现动态的雪花效果
2017/02/13 Javascript
jQuery表格(Table)基本操作实例分析
2017/03/10 Javascript
javascript实现文字无缝滚动效果
2017/08/26 Javascript
Vue完整项目构建(进阶篇)
2018/02/10 Javascript
微信小程序实现上传多张图片、删除图片
2020/07/29 Javascript
JavaScript 空间坐标的使用
2020/08/19 Javascript
node.js通过Sequelize 连接MySQL的方法
2020/12/28 Javascript
详解Python实现按任意键继续/退出的功能
2016/08/19 Python
带你认识Django
2019/01/15 Python
python xlwt如何设置单元格的自定义背景颜色
2019/09/03 Python
python 批量修改 labelImg 生成的xml文件的方法
2019/09/09 Python
在python中利用try..except来代替if..else的用法
2019/12/19 Python
Python数据可视化处理库PyEcharts柱状图,饼图,线性图,词云图常用实例详解
2020/02/10 Python
通俗讲解python 装饰器
2020/09/07 Python
详解Python中@staticmethod和@classmethod区别及使用示例代码
2020/12/14 Python
法国美发器材和产品购物网站:Beauty Coiffure
2016/12/05 全球购物
哈利波特商店:Harry Potter Shop
2018/11/30 全球购物
意大利中国电子产品购物网站:Geekmall.com
2019/09/30 全球购物
高中体育教学反思
2014/01/29 职场文书
计划生育工作汇报
2014/10/28 职场文书
2014年仓库管理工作总结
2014/12/17 职场文书
教师节慰问信
2015/02/15 职场文书