关于Keras Dense层整理


Posted in Python onMay 21, 2020

我就废话不多说了,大家还是直接看代码吧!

'''
Created on 2018-4-4

'''
keras.layers.core.Dense(
units, #代表该层的输出维度
activation=None, #激活函数.但是默认 liner
use_bias=True, #是否使用b
kernel_initializer='glorot_uniform', #初始化w权重,keras/initializers.py
bias_initializer='zeros', #初始化b权重
kernel_regularizer=None, #施加在权重w上的正则项,keras/regularizer.py
bias_regularizer=None, #施加在偏置向量b上的正则项
activity_regularizer=None, #施加在输出上的正则项
kernel_constraint=None, #施加在权重w上的约束项
bias_constraint=None #施加在偏置b上的约束项
)

# 所实现的运算是output = activation(dot(input, kernel)+bias)
# model.add(Dense(units=64, activation='relu', input_dim=784))

# keras初始化所有激活函数,activation:
# keras\activations.py
# keras\backend\cntk_backend.py
# import cntk as C
# 1.softmax:
#       对输入数据的最后一维进行softmax,一般用在输出层;
#   ndim == 2,K.softmax(x),其实调用的是cntk,是一个模块;
#   ndim >= 2,e = K.exp(x - K.max(x)),s = K.sum(e),return e / s
# 2.elu
#   K.elu(x)
# 3.selu: 可伸缩的指数线性单元
#   alpha = 1.6732632423543772848170429916717
#   scale = 1.0507009873554804934193349852946
#   return scale * K.elu(x, alpha)
# 4.softplus
#   C.softplus(x)
# 5.softsign
#   return x / (1 + C.abs(x))
# 6.relu
#   def relu(x, alpha=0., max_value=None):
#     if alpha != 0.:
#       negative_part = C.relu(-x)
#     x = C.relu(x)
#     if max_value is not None:
#       x = C.clip(x, 0.0, max_value)
#     if alpha != 0.:
#       x -= alpha * negative_part
#     return x
# 7.tanh
#   return C.tanh(x)
# 8.sigmoid
#   return C.sigmoid(x)
# 9.hard_sigmoid
#   x = (0.2 * x) + 0.5
#   x = C.clip(x, 0.0, 1.0)
#   return x
# 10.linear
#   return x

# keras初始化所有方法,initializer:
# Zeros
# Ones
# Constant(固定一个值)
# RandomNormal(正态分布)
# RandomUniform(均匀分布)
# TruncatedNormal(截尾高斯分布,神经网络权重和滤波器的推荐初始化方法)
# VarianceScaling(该初始化方法能够自适应目标张量的shape)
# Orthogonal(随机正交矩阵初始化)
# Identiy(单位矩阵初始化,仅适用于2D方阵)
# lecun_uniform(LeCun均匀分布初始化)
# lecun_normal(LeCun正态分布初始化)
# glorot_normal(Glorot正态分布初始化)
# glorot_uniform(Glorot均匀分布初始化)
# he_normal(He正态分布初始化)
# he_uniform(He均匀分布初始化,Keras中文文档写错了)

# keras正则化,regularizer:
# import backend as K
# L1: regularization += K.sum(self.l1 * K.abs(x))
# L2: regularization += K.sum(self.l2 * K.square(x))

补充知识:keras.layers.Dense()方法及其参数

一、Dense层

keras.layers.Dense(units, 
  activation=None, 
  use_bias=True, 
  kernel_initializer='glorot_uniform', 
  bias_initializer='zeros', 
  kernel_regularizer=None, 
  bias_regularizer=None, 
   activity_regularizer=None, 
  kernel_constraint=None, 
  bias_constraint=None)

二、参数

units: 神经元节点数数,鸡输出空间维度。

activation: 激活函数,若不指定,则不使用激活函数 (即线性激活: a(x) = x)。

use_bias: 布尔值,该层是否使用偏置向量。

kernel_initializer: kernel 权值矩阵的初始化器

bias_initializer: 偏置向量的初始化器

kernel_regularizer: 运用到 kernel 权值矩阵的正则化函数

bias_regularizer: 运用到偏置向的的正则化函数

activity_regularizer: 运用到层的输出的正则化函数 (它的 “activation”)。

kernel_constraint: 运用到 kernel 权值矩阵的约束函数

bias_constraint: 运用到偏置向量的约束函数

三、示例

例1:

from keras.layers import Dense

# 作为 Sequential 模型的第一层
model = Sequential()
model.add(Dense(32, input_shape=(16,)))
# 现在模型就会以尺寸为 (*, 16) 的数组作为输入,
# 其输出数组的尺寸为 (*, 32)

# 在第一层之后,你就不再需要指定输入的尺寸了:
model.add(Dense(32))

注意在Sequential模型的第一层要定义Dense层的形状,此处定义为input_shape=(16,)

例2:

from keras.layers import Dense

model = Sequential()
model.add(Dense(512, activation= 'sigmoid', input_dim= 2, use_bias= True))

这里定义了一个有512个神经元节点,使用sigmoid激活函数的神经层,此时输入形状参数为input_dim,注意它与input_shape参数的区别。

input_shape:即张量的形状,从前往后对应由外向内的维度

[[1],[2],[3]] 这个张量的shape为(3,1)

[[[1,2],[3,4]],[[5,6],[7,8]],[[9,10],[11,12]]]这个张量的shape为(3,2,2),

[1,2,3,4]这个张量的shape为(4,)

input_dim:代表张量的维度,之前3个例子的input_dim分别为2,3,1。

常见的一种用法:只提供了input_dim=32,说明输入是一个32维的向量,相当于一个一阶、拥有32个元素的张量,它的shape就是(32,)。因此,input_shape=(32, )

四、总结

本文对Dense()方法及其参数做了详细的介绍,并对其用法进行了大概的讲解,有什么问题可以评论区留言或者联系我,我会及时解答。希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python使用正则表达式提取网页URL的方法
May 26 Python
Golang与python线程详解及简单实例
Apr 27 Python
Python中模块pymysql查询结果后如何获取字段列表
Jun 05 Python
Python cookbook(数据结构与算法)在字典中将键映射到多个值上的方法
Feb 18 Python
Python 中Django验证码功能的实现代码
Jun 20 Python
python config文件的读写操作示例
Sep 27 Python
python定时任务 sched模块用法实例
Nov 04 Python
利用python实现PSO算法优化二元函数
Nov 13 Python
解决django model修改添加字段报错的问题
Nov 18 Python
基于python实现对文件进行切分行
Apr 26 Python
Python tkinter实现简单加法计算器代码实例
May 13 Python
Pycharm2020.1安装无法启动问题即设置中文插件的方法
Aug 07 Python
Django如何使用redis作为缓存
May 21 #Python
如何打包Python Web项目实现免安装一键启动的方法
May 21 #Python
keras之权重初始化方式
May 21 #Python
Python3 ID3决策树判断申请贷款是否成功的实现代码
May 21 #Python
Python使用os.listdir和os.walk获取文件路径
May 21 #Python
keras 权重保存和权重载入方式
May 21 #Python
浅谈keras保存模型中的save()和save_weights()区别
May 21 #Python
You might like
xml+php动态载入与分页
2006/10/09 PHP
屏蔽浏览器缓存另类方法
2006/10/09 PHP
PHP实现用户认证及管理完全源码
2007/03/11 PHP
PHP在获取指定目录下的目录,在获取的目录下面再创建文件,多平台
2011/08/03 PHP
在php7中MongoDB实现模糊查询的方法详解
2017/05/03 PHP
页面版文本框智能提示JS代码
2009/11/20 Javascript
jQuery UI 应用不同Theme的办法
2010/09/12 Javascript
全面理解面向对象的 JavaScript(来自ibm)
2013/11/10 Javascript
从数组中随机取x条不重复数据的JS代码
2013/12/24 Javascript
JavaScript实现带标题的图片轮播特效
2015/05/20 Javascript
JavaScript和HTML DOM的区别与联系及Javascript和DOM的关系
2015/11/15 Javascript
Bootstrap布局方式详解
2016/05/27 Javascript
JS实现鼠标框选效果完整实例
2016/06/20 Javascript
ES6下子组件调用父组件的方法(推荐)
2018/02/23 Javascript
详解Vue项目在其他电脑npm run dev运行报错的解决方法
2018/10/29 Javascript
详解VUE单页应用骨架屏方案
2019/01/17 Javascript
实例介绍JavaScript中多种组合继承
2019/01/20 Javascript
vue计算属性get和set用法示例
2019/02/08 Javascript
Javascript通过控制类名更改样式
2019/05/24 Javascript
layui table单元格事件修改值的方法
2019/09/24 Javascript
vue 里面的 $forceUpdate() 强制实例重新渲染操作
2020/09/21 Javascript
Python中使用SAX解析xml实例
2014/11/21 Python
Python实现CET查分的方法
2015/03/10 Python
python调用pyaudio使用麦克风录制wav声音文件的教程
2019/06/26 Python
简单了解Python3里的一些新特性
2019/07/13 Python
基于virtualenv创建python虚拟环境过程图解
2020/03/30 Python
python 模块导入问题汇总
2021/02/01 Python
Expedia马来西亚旅游网站:廉价酒店,度假村和航班预订
2016/07/26 全球购物
便携式太阳能系统的创新者:GOAL ZERO
2018/02/04 全球购物
Wolford法国官网:奥地利奢侈内衣品牌
2020/08/11 全球购物
我们没有写servlet的构造方法,那么容器是怎么创建servlet的实例呢
2013/04/24 面试题
一套Delphi的笔试题二
2013/05/11 面试题
庆元旦迎新年广播稿
2014/02/18 职场文书
《画杨桃》教学反思
2014/04/13 职场文书
党员干部廉洁承诺书
2014/05/28 职场文书
NGINX 权限控制文件预览和下载的实现原理
2022/01/18 Servers