关于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模块restful使用方法实例
Dec 10 Python
Python编程使用tkinter模块实现计算器软件完整代码示例
Nov 29 Python
解决pip install的时候报错timed out的问题
Jun 12 Python
在Python中关于使用os模块遍历目录的实现方法
Jan 03 Python
Python如何爬取微信公众号文章和评论(基于 Fiddler 抓包分析)
Jun 28 Python
python KNN算法实现鸢尾花数据集分类
Oct 24 Python
tensorflow实现打印ckpt模型保存下的变量名称及变量值
Jan 04 Python
使用OpenCV实现道路车辆计数的使用方法
Jul 15 Python
matplotlib.pyplot.plot()参数使用详解
Jul 28 Python
Python pymsql模块的使用
Sep 07 Python
Django如何重置migration的几种情景
Feb 24 Python
Python绘制地图神器folium的新人入门指南
May 23 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新手上路(五)
2006/10/09 PHP
php Static关键字实用方法
2010/06/04 PHP
简单的PHP多图上传小程序代码
2011/07/17 PHP
php IP转换整形(ip2long)的详解
2013/06/06 PHP
ASP和PHP实现生成网站快捷方式并下载到桌面的方法
2014/05/08 PHP
php简单实现屏蔽指定ip段用户的访问
2015/04/29 PHP
thinkphp分页实现效果
2016/10/13 PHP
PHP面向对象五大原则之里氏替换原则(LSP)详解
2018/04/08 PHP
小程序微信退款功能实现方法详解【基于thinkPHP】
2019/05/05 PHP
JAVASCRIPT 对象的创建与使用
2021/03/09 Javascript
javascript innerHTML、outerHTML、innerText、outerText的区别
2008/11/24 Javascript
javascript delete 使用示例代码
2010/03/29 Javascript
JavaScript中循环遍历Array与Map的方法小结
2016/03/12 Javascript
Bootstrap 组件之按钮(二)
2016/05/11 Javascript
vue.js初学入门教程(2)
2016/11/07 Javascript
js实现自动轮换选项卡
2017/01/13 Javascript
微信小程序模版渲染详解
2018/01/26 Javascript
Javascript组合继承方法代码实例解析
2020/04/02 Javascript
JavaScript冒泡算法原理与实现方法深入理解
2020/06/04 Javascript
Python中的闭包实例详解
2014/08/29 Python
python使用reportlab实现图片转换成pdf的方法
2015/05/22 Python
Python多进程multiprocessing.Pool类详解
2018/04/27 Python
对Python 窗体(tkinter)树状数据(Treeview)详解
2018/10/11 Python
Python self用法详解
2020/11/28 Python
澳大利亚领先的孕妇服装品牌:Mamaway
2018/08/14 全球购物
马德里竞技官方网上商店:Atletico Madrid Shop
2019/03/31 全球购物
模具专业推荐信
2013/10/30 职场文书
大家检讨书5000字
2014/02/03 职场文书
班子成员四风问题自我剖析材料
2014/09/29 职场文书
交警作风整顿剖析材料
2014/10/11 职场文书
2015年度保密工作总结
2015/04/24 职场文书
四年级作文之植物
2019/09/20 职场文书
Java字符缓冲流BufferedWriter
2022/04/09 Java/Android
MySQL运行报错:“Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre”解决方法
2022/06/14 MySQL
Python 读取千万级数据自动写入 MySQL 数据库
2022/06/28 Python
Win11 25163.1010更新补丁KB5016904推送,测试服务验证管道(附更新修复汇总)
2022/07/23 数码科技