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写的一个简单DNS服务器实例
Jun 04 Python
Python下使用Psyco模块优化运行速度
Apr 05 Python
python实现上传下载文件功能
Nov 19 Python
Python模块文件结构代码详解
Feb 03 Python
python 3利用Dlib 19.7实现摄像头人脸检测特征点标定
Feb 26 Python
python 获取一个值在某个区间的指定倍数的值方法
Nov 12 Python
使用python脚本自动创建pip.ini配置文件代码实例
Sep 20 Python
python实现回旋矩阵方式(旋转矩阵)
Dec 04 Python
Python爬虫库requests获取响应内容、响应状态码、响应头
Jan 25 Python
使用Matplotlib绘制不同颜色的带箭头的线实例
Apr 17 Python
Python自动巡检H3C交换机实现过程解析
Aug 14 Python
如何利用python创作字符画
Jun 25 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/10/09 PHP
ThinkPHP实现动态包含文件的方法
2014/11/29 PHP
php中return的用法实例分析
2015/02/28 PHP
php实现的网络相册图片防盗链完美破解方法
2015/07/01 PHP
PHP之图片上传类实例代码(加了缩略图)
2016/06/30 PHP
ZendFramework框架实现连接两个或多个数据库的方法
2016/12/08 PHP
Laravel如何实现适合Api的异常处理响应格式
2020/06/14 PHP
Javascript中封装window.open解决不兼容问题
2014/09/28 Javascript
jquery动态添加删除(tr/td)
2015/02/09 Javascript
JavaScript面向对象分层思维全面解析
2016/11/22 Javascript
AngularJS开发教程之控制器之间的通信方法分析
2016/12/25 Javascript
利用Js+Css实现折纸动态导航效果实例源码
2017/01/25 Javascript
详解Vue中组件的缓存
2019/04/20 Javascript
在layui框架中select下拉框监听更改事件的例子
2019/09/20 Javascript
vue 解决路由只变化参数页面组件不更新问题
2019/11/05 Javascript
uniapp电商小程序实现订单30分钟倒计时
2020/11/01 Javascript
编写Python脚本来获取Google搜索结果的示例
2015/05/04 Python
Python3控制路由器——使用requests重启极路由.py
2016/05/11 Python
python实现人脸识别代码
2017/11/08 Python
Python中矩阵创建和矩阵运算方法
2018/08/04 Python
Python动态参数/命名空间/函数嵌套/global和nonlocal
2019/05/29 Python
pytorch实现从本地加载 .pth 格式模型
2020/02/14 Python
Python查找不限层级Json数据中某个key或者value的路径方式
2020/02/27 Python
python实现小程序推送页面收录脚本
2020/04/20 Python
Python定时从Mysql提取数据存入Redis的实现
2020/05/03 Python
全球知名旅游社区法国站点:TripAdvisor法国
2016/08/03 全球购物
印尼披萨外送专家:Domino’s Pizza印尼
2017/12/28 全球购物
行政主管职责范本
2014/03/07 职场文书
喜之郎果冻广告词
2014/03/20 职场文书
团支部推优材料
2014/05/21 职场文书
2014年学习全国道德模范事迹思想汇报
2014/09/15 职场文书
2015年挂职锻炼工作总结
2014/12/12 职场文书
小学生思想品德评语
2014/12/31 职场文书
感恩母亲节活动总结
2015/02/10 职场文书
关于清明节的演讲稿2015
2015/03/18 职场文书
2016大学军训心得体会
2016/01/11 职场文书