关于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 09 Python
讲解Python中的递归函数
Apr 27 Python
Python中正则表达式的详细教程
Apr 30 Python
给Python中的MySQLdb模块添加超时功能的教程
May 05 Python
python类:class创建、数据方法属性及访问控制详解
Jul 25 Python
Python使用filetype精确判断文件类型
Jul 02 Python
Python切片工具pillow用法示例
Mar 30 Python
Python多进程与服务器并发原理及用法实例分析
Aug 21 Python
Python编程深度学习计算库之numpy
Dec 28 Python
Python Flask框架扩展操作示例
May 03 Python
Python字节单位转换实例
Dec 05 Python
Python 3 使用Pillow生成漂亮的分形树图片
Dec 24 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 随机生成10位字符代码
2009/03/26 PHP
header跳转和include包含问题详解
2012/09/08 PHP
PHP如何利用P3P实现跨域
2013/08/24 PHP
ThinkPHP标签制作教程
2014/07/10 PHP
轻松掌握php设计模式之访问者模式
2016/09/23 PHP
用jQuery实现检测浏览器及版本的脚本代码
2008/01/22 Javascript
判断js中各种数据的类型方法之typeof与0bject.prototype.toString讲解
2013/11/07 Javascript
js在数组中删除重复的元素自保留一个(两种实现思路)
2014/08/22 Javascript
如何减少浏览器的reflow和repaint
2015/02/26 Javascript
使用Raygun来自动追踪AngularJS中的异常
2015/06/23 Javascript
JavaScript实现图片滑动切换的代码示例分享
2016/03/06 Javascript
Bootstrap3使用typeahead插件实现自动补全功能
2016/07/07 Javascript
AngularJS基础 ng-srcset 指令简单示例
2016/08/03 Javascript
聊聊JavaScript如何实现继承及特点
2017/04/07 Javascript
seajs中最常用的7个功能、配置示例
2017/10/10 Javascript
原生JS实现动态加载js文件并在加载成功后执行回调函数的方法
2020/12/30 Javascript
JS编写兼容IE6,7,8浏览器无缝自动轮播
2018/10/12 Javascript
JQuery 实现文件下载的常用方法分析
2019/10/29 jQuery
node.js中 mysql 增删改查操作及async,await处理实例分析
2020/02/11 Javascript
vue-socket.io接收不到数据问题的解决方法
2020/05/13 Javascript
[42:20]2014 DOTA2华西杯精英邀请赛5 24 DK VS NewBee
2014/05/25 DOTA
[05:45]Ti4观战指南(下)
2014/07/07 DOTA
github配置使用指南
2014/11/18 Python
Python使用pyshp库读取shapefile信息的方法
2018/12/29 Python
pygame实现俄罗斯方块游戏(AI篇1)
2019/10/29 Python
如何使用selenium和requests组合实现登录页面
2020/02/03 Python
python3.8动态人脸识别的实现示例
2020/09/21 Python
CSS+jQuery+PHP+MySQL实现的在线答题功能
2015/04/25 HTML / CSS
建筑自我鉴定
2013/10/19 职场文书
大学优秀班主任事迹材料
2014/05/02 职场文书
征兵宣传标语
2014/06/20 职场文书
党的群众路线教育实践活动个人对照检查材料范文
2014/09/25 职场文书
逃课检讨书怎么写
2015/01/01 职场文书
2015年销售助理工作总结
2015/05/11 职场文书
python库sklearn常用操作
2021/08/23 Python
MySQL常见优化方案汇总
2022/01/18 MySQL