关于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从ftp下载数据保存实例
Nov 20 Python
举例讲解Python程序与系统shell交互的方式
Apr 09 Python
Python pickle模块用法实例分析
May 27 Python
Python实现SSH远程登陆,并执行命令的方法(分享)
May 08 Python
tensorflow 获取变量&打印权值的实例讲解
Jun 14 Python
python语音识别实践之百度语音API
Aug 30 Python
Python根据文件名批量转移图片的方法
Oct 21 Python
python实现本地图片转存并重命名的示例代码
Oct 27 Python
python查询文件夹下excel的sheet名代码实例
Apr 02 Python
ERLANG和PYTHON互通实现过程详解
Jul 05 Python
Python try except finally资源回收的实现
Jan 25 Python
使用python实现学生信息管理系统
Feb 25 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
一键删除顽固的空文件夹 软件下载
2007/01/26 PHP
用js进行url编码后用php反解以及用php实现js的escape功能函数总结
2010/02/08 PHP
使用新浪微博API的OAuth认证发布微博实例
2015/03/27 PHP
php实现插入数组但不影响原有顺序的方法
2015/03/27 PHP
php微信公众号开发之答题连闯三关
2018/10/20 PHP
你需要知道的JavsScript可以做什么?
2007/06/29 Javascript
自写的一个jQuery圆角插件
2010/10/26 Javascript
javascript每日必学之条件分支
2016/02/17 Javascript
Bootstrap滚动监听(Scrollspy)插件详解
2016/04/26 Javascript
JavaScript 数组中最大最小值
2016/06/05 Javascript
用React实现一个完整的TodoList的示例代码
2017/10/30 Javascript
vue页面加载闪烁问题的解决方法
2018/03/28 Javascript
Vue2 监听属性改变watch的实例代码
2018/08/27 Javascript
vue 根据数组中某一项的值进行排序的方法
2018/08/30 Javascript
默认浏览器设置及vue自动打开页面的方法
2018/09/21 Javascript
使用JavaScript保存文本文件到本地的两种方法
2019/01/22 Javascript
在vue项目中引入vue-beauty操作方法
2019/02/11 Javascript
JavaScript组合设计模式--改进引入案例分析
2020/05/23 Javascript
详解vue3.0 的 Composition API 的一种使用方法
2020/10/26 Javascript
Python中__name__的使用实例
2015/04/14 Python
Python实现高效求解素数代码实例
2015/06/30 Python
Fiddler如何抓取手机APP数据包
2016/01/22 Python
Python3.遍历某文件夹提取特定文件名的实例
2018/04/26 Python
解决Pycharm无法import自己安装的第三方module问题
2018/05/18 Python
解析Python3中的Import
2019/10/13 Python
python实现文件+参数发送request的实例代码
2021/01/05 Python
css3实现一款模仿iphone样式的注册表单
2013/03/20 HTML / CSS
英国最大最好的无人机商店:Drones Direct
2019/07/12 全球购物
我能否用void** 指针作为参数, 使函数按引用接受一般指针
2013/02/16 面试题
什么是GWT的Entry Point
2013/08/16 面试题
六一儿童节主持词
2014/03/21 职场文书
承诺书的格式范文
2014/03/28 职场文书
保护环境倡议书
2014/04/14 职场文书
县政府办公室领导班子对照检查材料思想汇报
2014/09/28 职场文书
廉政文化进校园广播稿
2014/10/20 职场文书
使用Pytorch实现two-head(多输出)模型的操作
2021/05/28 Python