关于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判断变量是否已经定义的方法
Aug 18 Python
Python常见加密模块用法分析【MD5,sha,crypt模块】
May 24 Python
Python2.7读取PDF文件的方法示例
Jul 13 Python
Python OpenCV实现图片上输出中文
Jan 22 Python
解决python nohup linux 后台运行输出的问题
May 11 Python
python3 拼接字符串的7种方法
Sep 12 Python
PyCharm代码提示忽略大小写设置方法
Oct 28 Python
Python实战购物车项目的实现参考
Feb 20 Python
python实现KNN分类算法
Oct 16 Python
python如何导入依赖包
Jul 13 Python
OpenCV全景图像拼接的实现示例
Jun 05 Python
Python绘制散乱的点构成的图的方法
Apr 21 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
PHP扩展模块Pecl、Pear以及Perl的区别
2014/04/09 PHP
让回调函数 showResponse 也带上参数的代码
2007/08/13 Javascript
从js向Action传中文参数出现乱码问题的解决方法
2013/12/29 Javascript
字段太多jquey快速清空表单内容方法
2014/08/21 Javascript
JS获取当前网页大小以及屏幕分辨率等
2014/09/05 Javascript
JavaScript多并发问题如何处理
2015/10/28 Javascript
jquery对复选框(checkbox)的操作汇总
2016/01/13 Javascript
获取阴历(农历)和当前日期的js代码
2016/02/15 Javascript
基于BootStrap实现局部刷新分页实例代码
2016/08/08 Javascript
CSS3 3D 技术手把手教你玩转
2016/09/02 Javascript
jQuery实现的无缝广告图片左右滚动功能详解
2016/12/24 Javascript
Vue 仿百度搜索功能实现代码
2017/02/16 Javascript
bootstrap switch开关组件使用方法详解
2017/08/22 Javascript
vue组件实现文字居中对齐的方法
2017/08/23 Javascript
Vue实现带进度条的文件拖动上传功能
2018/02/23 Javascript
浅谈vue同一页面中拥有两个表单时,的验证问题
2018/09/18 Javascript
angularJs自定义过滤器实现手机号信息隐藏的方法
2018/10/08 Javascript
微信小程序dom操作的替代思路实例分析
2018/12/06 Javascript
微信小程序实现比较功能的方法汇总(五种方法)
2020/03/07 Javascript
使用python绘制人人网好友关系图示例
2014/04/01 Python
python实现文件快照加密保护的方法
2015/06/30 Python
深入理解python中的闭包和装饰器
2016/06/12 Python
利用Python读取文件的四种不同方法比对
2017/05/18 Python
使用python获取邮箱邮件的设置方法
2019/09/20 Python
在python shell中运行python文件的实现
2019/12/21 Python
Python批量将图片灰度化的实现代码
2020/04/11 Python
python代码能做成软件吗
2020/07/24 Python
详解pycharm自动import所需的库的操作方法
2020/11/30 Python
Django解决frame拒绝问题的方法
2020/12/18 Python
人力资源管理专业应届生求职信
2013/09/28 职场文书
大专毕业自我鉴定
2014/02/04 职场文书
英文请假条
2014/04/11 职场文书
推广普通话共筑中国梦演讲稿
2014/09/21 职场文书
2016清明节森林防火广播稿
2015/12/17 职场文书
小学生安全教育心得体会
2016/01/15 职场文书
聊聊JS ES6中的解构
2021/04/29 Javascript