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实现批量把SVG格式转成png、pdf格式的代码分享
Aug 21 Python
Python中有趣在__call__函数
Jun 21 Python
简单讲解Python中的数字类型及基本的数学计算
Mar 11 Python
python引入导入自定义模块和外部文件的实例
Jul 24 Python
对numpy 数组和矩阵的乘法的进一步理解
Apr 04 Python
浅谈python中对于json写入txt文件的编码问题
Jun 07 Python
python 标准差计算的实现(std)
Jul 29 Python
python3中sorted函数里cmp参数改变详解
Mar 12 Python
python+opencv实现移动侦测(帧差法)
Mar 20 Python
python中的垃圾回收(GC)机制
Sep 21 Python
Python可以用来做什么
Nov 23 Python
讲解Python实例练习逆序输出字符串
May 06 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之第三天
2006/10/09 PHP
PHP结合jQuery.autocomplete插件实现输入自动完成提示的功能
2015/04/27 PHP
javascript 跨浏览器开发经验总结(五) js 事件
2010/05/19 Javascript
关于jquery中全局函数each使用介绍
2013/12/10 Javascript
完美兼容IE,chrome,ff的设为首页、加入收藏及保存到桌面js代码
2014/12/17 Javascript
jquery插件qrcode在线生成二维码
2015/04/26 Javascript
深入浅出 jQuery中的事件机制
2016/08/23 Javascript
微信小程序 框架详解及实例应用
2016/09/26 Javascript
JS对大量数据进行多重过滤的方法
2016/11/04 Javascript
node.js版本管理工具n无效的原理和解决方法
2016/11/24 Javascript
纯JS实现出生日期[年月日]下拉菜单效果
2018/06/01 Javascript
详解Vue中的基本语法和常用指令
2019/07/23 Javascript
webpack 处理CSS资源的实现
2019/09/27 Javascript
Python面向对象特殊成员
2017/04/24 Python
同时安装Python2 &amp; Python3 cmd下版本自由选择的方法
2017/12/09 Python
Python 的AES加密与解密实现
2019/07/09 Python
用django设置session过期时间的方法解析
2019/08/05 Python
导入tensorflow时报错:cannot import name 'abs'的解决
2019/10/10 Python
Python 实现数组相减示例
2019/12/27 Python
基于torch.where和布尔索引的速度比较
2020/01/02 Python
Python 如何测试文件是否存在
2020/07/31 Python
详解pyqt5的UI中嵌入matplotlib图形并实时刷新(挖坑和填坑)
2020/08/07 Python
H5 meta小结(前端必看篇)
2016/08/24 HTML / CSS
Oakley官网:运动太阳镜、雪镜和服装
2016/09/30 全球购物
有趣的睡衣和礼物:LazyOne
2019/11/27 全球购物
英国Iceland杂货店:网上食品购物
2020/12/16 全球购物
九年级物理教学反思
2014/01/29 职场文书
运动会稿件50字
2014/02/17 职场文书
干部鉴定材料
2014/05/18 职场文书
政府四风问题整改措施
2014/10/04 职场文书
国富论读书笔记
2015/06/26 职场文书
生产设备维护保养制度
2015/08/06 职场文书
体育教师研修感悟
2015/11/18 职场文书
2016年小学圣诞节活动总结
2016/03/31 职场文书
python 实现定时任务的四种方式
2021/04/01 Python
MySQL中日期型单行函数代码详解
2021/06/21 MySQL