关于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 psutil模块简单使用实例
Apr 28 Python
利用python将json数据转换为csv格式的方法
Mar 22 Python
Python 实现异步调用函数的示例讲解
Oct 14 Python
pandas修改DataFrame列名的实现方法
Feb 22 Python
python Tcp协议发送和接收信息的例子
Jul 22 Python
python字符串分割及字符串的一些常规方法
Jul 24 Python
django做form表单的数据验证过程详解
Jul 26 Python
python 浅谈serial与stm32通信的编码问题
Dec 18 Python
python实现图像全景拼接
Mar 27 Python
python将dict中的unicode打印成中文实例
May 11 Python
python基于selenium爬取斗鱼弹幕
Feb 20 Python
Python机器学习之KNN近邻算法
May 14 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 变量类型的强制转换
2009/10/23 PHP
PHP rawurlencode与urlencode函数的深入分析
2013/06/08 PHP
php实现的百度搜索某地天气的小偷代码
2014/04/23 PHP
ThinkPHP CURD方法之where方法详解
2014/06/18 PHP
PHP实现的最大正向匹配算法示例
2017/12/19 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
2020/02/21 PHP
PHP 对象接口简单实现方法示例
2020/04/13 PHP
用javascript编写的第一人称射击游戏
2007/02/25 Javascript
asp.net下利用js实现返回上一页的实现方法小集
2009/11/24 Javascript
Array.prototype.slice.apply的使用方法
2010/03/17 Javascript
基于Jquery实现表格动态分页实现代码
2011/06/21 Javascript
php实例分享之实现显示网站运行时间
2014/05/20 Javascript
javascript实现限制上传文件大小
2015/02/06 Javascript
Windows系统下使用Sublime搭建nodejs环境
2015/04/13 NodeJs
javascript中Date()函数在各浏览器中的显示效果
2015/06/18 Javascript
jQuery简单实现仿京东分类导航层效果
2016/06/07 Javascript
深入理解Javascript中的观察者模式
2017/02/20 Javascript
jquery实现手机端单店铺购物车结算删除功能
2017/02/22 Javascript
javascript html5轻松实现拖动功能
2017/03/01 Javascript
jQuery回调方法使用示例
2017/06/26 jQuery
JS中Swiper的使用和轮播图效果
2017/08/11 Javascript
Vue仿手机qq的实例代码(demo)
2017/09/08 Javascript
vue-cli中的webpack配置详解
2017/09/25 Javascript
element-ui 表格实现单元格可编辑的示例
2018/02/26 Javascript
js制作提示框插件
2020/12/24 Javascript
浅谈python迭代器
2017/11/08 Python
Python实现的自定义多线程多进程类示例
2018/03/23 Python
Python如何访问字符串中的值
2020/02/09 Python
Python 如何在字符串中插入变量
2020/08/01 Python
Django实现微信小程序支付的示例代码
2020/09/03 Python
保荐人的岗位职责
2013/11/19 职场文书
质监局领导班子践行群众路线整改方案
2014/10/26 职场文书
2014年班主任工作总结
2014/11/08 职场文书
2015年班级工作总结范文
2015/04/03 职场文书
laravel添加角色和模糊搜索功能的实现代码
2021/06/22 PHP
Elasticsearch 配置详解
2022/04/19 Java/Android