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实现字典依据value排序
Feb 24 Python
Python编程之列表操作实例详解【创建、使用、更新、删除】
Jul 22 Python
利用Python自带PIL库扩展图片大小给图片加文字描述的方法示例
Aug 08 Python
详解python 注释、变量、类型
Aug 10 Python
python读取word文档,插入mysql数据库的示例代码
Nov 07 Python
使用Python实现毫秒级抢单功能
Jun 06 Python
python turtle 绘制太极图的实例
Dec 18 Python
Python @property原理解析和用法实例
Feb 11 Python
Python 使用 environs 库定义环境变量的方法
Feb 25 Python
浅析Python中字符串的intern机制
Oct 03 Python
解决python3输入的坑——input()
Dec 05 Python
利用python做表格数据处理
Apr 13 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 feof用来识别文件末尾字符的方法
2010/08/01 PHP
javascript实现仿银行密码输入框效果的代码
2007/12/13 Javascript
js获取单元格自定义属性值的代码(IE/Firefox)
2010/04/05 Javascript
jquery中ajax使用error调试错误的方法
2015/02/08 Javascript
CSS3实现动态背景登录框的代码
2015/07/28 Javascript
以Python代码实例展示kNN算法的实际运用
2015/10/26 Javascript
jQuery中text() val()和html()的区别实例详解
2016/06/28 Javascript
JS实现用户注册时获取短信验证码和倒计时功能
2016/10/27 Javascript
浅析JavaScript中作用域和作用域链
2016/12/06 Javascript
从零学习node.js之利用express搭建简易论坛(七)
2017/02/25 Javascript
JS获取鼠标位置距浏览器窗口距离的方法示例
2017/04/11 Javascript
实例详解Vue项目使用eslint + prettier规范代码风格
2018/08/20 Javascript
webpack 静态资源集中输出的方法示例
2018/11/09 Javascript
Vue如何基于vue-i18n实现多国语言兼容
2020/07/17 Javascript
JavaScript实现刮刮乐效果
2020/11/01 Javascript
[01:07:41]IG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[51:14]LGD vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.21
2018/08/22 DOTA
python中的内置函数getattr()介绍及示例
2014/07/20 Python
关于Python元祖,列表,字典,集合的比较
2017/01/06 Python
Python获取本机所有网卡ip,掩码和广播地址实例代码
2018/01/22 Python
Pycharm 字体大小调整设置的方法实现
2019/09/27 Python
Django跨域请求原理及实现代码
2020/11/14 Python
HTML5之tabindex属性全面解析
2016/07/07 HTML / CSS
HTML5为输入框添加语音输入功能的实现方法
2017/02/06 HTML / CSS
中东地区为妈妈们提供一切的头号购物目的地:Sprii
2018/05/06 全球购物
小学语文教学反思
2014/02/10 职场文书
上课打牌的检讨书
2014/02/15 职场文书
有趣的广告词
2014/03/18 职场文书
招标保密承诺书
2015/01/20 职场文书
五一劳动节慰问信
2015/02/14 职场文书
2015年仓库管理工作总结
2015/05/25 职场文书
金陵十三钗观后感
2015/06/04 职场文书
嘉年华活动新闻稿
2015/07/17 职场文书
Vue3中的Refs和Ref详情
2021/11/11 Vue.js
Pyhton爬虫知识之正则表达式详解
2022/04/01 Python
Linux服务器离线安装 nginx的详细步骤
2022/06/16 Servers