第5章 深度学习与Keras工程实践

5.4 常用的神经网络层

5.4.1 全连接层

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,**kwargs)units:正整数,输出空间的维数。
activation: 激活函数,如果未指定任何内容,则不会应用任何激活函数,即“线性”激活:a(x)= x
use_bias:Boolean,该层是否使用偏向量。
kernel_initializer:权重矩阵的初始化方法。
bias_initializer:偏向量的初始化方法。
kernel_regularizer:权重矩阵的正则化方法。
bias_regularizer:偏向量的正则化方法。
activity_regularizer:输出层正则化方法。
kernel_constraint:权重矩阵约束函数。
bias_constraint:偏向量约束函数。

5.4.2 二维卷积层

一维卷积主要用于时序数据处理,二维卷积用于对图像的空间卷积,三维卷积主要用于对立体空间卷积。

keras.layers.Conv2D(filters,kernel_size,strides=(1, 1),padding='valid',data_format=None,dilation_rate=(1, 1),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,**kwargs
)
inputs: 把上一层的输出作为输入(直接将上一层作为参数输入即可)
input_shape: 当作为模型的第一层时,需要指出输入的形状(samples,rows,cols,channels),只指出后三维即可,第一维度按batch_size自动指定
filters: 卷积过滤器的数量,对应输出的维数
kernel_size: 整数,过滤器的大小,如果为一个整数则宽和高相同
strides: 横向和纵向的步长,如果为一个整数则横向和纵向相同
padding valid: 表示不够卷积核大小的块,则丢弃;same表示不够卷积核大小的块就补0,所以输出和输入形状相同
data_format: channels_last为(batch,height,width,channels),channels_first为(batch,channels,height,width)
dilation_rate: 一个整数,或者包含了两个整数的元组/队列,表示使用扩张卷积时的扩张率。如果是一个整数,则所有方向的扩张率相等。另外, strides 不等于1 和 dilation_rate 不等于1 这两种情况不能同时存在。
activation  激活函数,None是线性函数
use_bias    是否使用偏差量
kernel_initializer  卷积核的初始化。
bias_initializer    偏差向量的初始化。如果是None,则使用默认的初始值。
kernel_regularizer  卷积核的正则项
bias_regularizer    偏差向量的正则项
activity_regularizer    输出的正则函数
bias_constraint 映射函数,当偏差向量被Optimizer更新后应用到偏差向量上。
trainable   Boolean类型。
name    字符串,层的名字。
reuse   Boolean类型,表示是否可以重复使用具有相同名字的前一层的权重。

5.4.3 池化层

池化层也称为抽样层,是一种在图像的特定范围内聚合不同位置特征的操作。这是因为卷积之后的图像具有局部特征,并且图像的每个像素区域通常具有很高的相似性。图像区域中的特征平均值或者最大值可以用来表示该区域的整体特征。这样不仅可以压缩数据,还会改善结果,使得神经网络不会发生过拟合。

一般放在卷积层之后,减少数据量,起到降采样作用,可以进一步进行特征提取和压缩作用。

均值池化
随机池化
最大池化

池化层和卷积层配合使用的另一个好处是具有更好的平移不变性,因为图像平移前后的数据经过池化处理后的差距可能已经很小了。

keras.layers.MaxPooling2D(pool_size=(2, 2), strides=None, padding='valid', data_format=None)pool_size: 整数,或者2个整数表示的元组,沿(垂直,水平)方向缩小比例的因数。 (2,2)会把输入张量的两个维度都缩小一半。 如果只使用一个整数,那么两个维度都会使用同样的窗口长度。strides: 整数,2 个整数表示的元组,或者是 None。 表示步长值。 如果是 None,那么默认值是 pool_size。padding: "valid" 或者 "same" (区分大小写)。data_format: 字符串,channels_last (默认)或 channels_first 之一。 表示输入各维度的顺序。 channels_last 代表尺寸是 (batch, height, width, channels) 的输入张量, 而 channels_first 代表尺寸是 (batch, channels, height, width) 的输入张量。 默认值根据 Keras 配置文件 ~/.keras/keras.json 中的 image_data_format 值来设置。 如果还没有设置过,那么默认值就是 "channels_last"。

全连接网络的一个最大缺点是参数大,而全局平均池化恰好可以代替卷积神经网络中的全连接层,可以减少参数量

全局平均池化:

keras.layers.GlobalAveragePooling2D(data_format=None)

全局最大池化:

keras.layers.GlobalMaxPooling2D(data_format=None)

5.4.4 BN层

批量标准化层
在训练时,对输入数据进行标准化,可以提高网络的训练速度
针对隐藏层,往往存在着Internal Covariate Shift现象,BN层解决这个问题
针对每一批次,每一层的激活值进行处理

IID独立同分布假设就是假设训练数据与测试数据是满足相同分布的,那么通过训练数据获得的模型能够在测试集上获得较好的结果
BN使得每一层的神经网络输入保持相同的分布,实践中获得好的结果。

keras.layers.normalization.BatchNormalization(axis=-1, momentum=0.99, epsilon=0.001, center=True, scale=True, beta_initializer='zeros', gamma_initializer='ones',     moving_mean_initializer='zeros', moving_variance_initializer='ones', beta_regularizer=None, gamma_regularizer=None, beta_constraint=None, gamma_constraint=None)

该层在每个batch上将前一层的激活值重新规范化,即使得其输出数据的均值接近0,其标准差接近1

  • axis: 整数,指定要规范化的轴,通常为特征轴。例如在进行- data_format="channels_first的2D卷积后,一般会设axis=1。
  • momentum: 动态均值的动量
  • epsilon:大于0的小浮点数,用于防止除0错误
  • center: 若设为True,将会将beta作为偏置加上去,否则忽略参数beta
  • scale: 若设为True,则会乘以gamma,否则不使用gamma。当下一层是线性的时,可以设False,因为scaling的操作将被下一层执行。
  • beta_initializer:beta权重的初始方法
  • gamma_initializer: gamma的初始化方法
  • moving_mean_initializer: 动态均值的初始化方法
  • moving_variance_initializer: 动态方差的初始化方法
  • beta_regularizer: 可选的beta正则
  • gamma_regularizer: 可选的gamma正则
  • beta_constraint: 可选的beta约束
  • gamma_constraint: 可选的gamma约束

5.4.5 Drouput层

对于全连接层,参数量过大,容易造成过拟合。Dropout层,在训练中,对于每一个神经元,有一定的概率剔除,暂时丢弃,故而每个批次都在训练不同的网络,增加了健壮性,减少过拟合。

keras.layers.Dropout(rate,noise_shape=None,seed=None
)
  • rate:0-1,指定需要断开的比例
  • noise_shape:表示将与输入数据相乘的二进制dropout掩层的形状,一般默认即可。
  • seed:随机数种子

5.4.6 Flatten层

将输入数据展平,不影响批量的大小。
我们将flatten层放置在卷积层和全连接层中间,起到转换作用,因为卷积层输出多个二维特征图,需要转换为向量序列的形式,才和全连接层一一对应。

keras.layers.Flatten(data_format=None)

示例

from tensorflow import keras
from keras.models import Sequential
from keras.layers import Conv2D, Flatten
model = Sequential()
model.add(Conv2D(64, (3,3), input_shape=(3,32,32), padding='same'))
# model.output_shape===(None, 64, 32, 32)
model.add(Flatten())
# model.output_shape===(None, 65536)

python 人脸识别:从入门到精通 (5.4)常用的神经网络层相关推荐

  1. Python人脸识别——从入门到工程实践

    参考书籍:<Python人脸识别从入门到工程实践> 全书共8章: 第 1 章:介绍了人脸识别的基础知识和必备常识: 第 2~4 章:详细讲解了与人脸识别相关的数学.机器学习.计算机视觉.O ...

  2. python人脸识别从入门到工程pdf_Python人脸识别:从入门到工程实践

    前言 第1章 人脸识别入门1 1.1 人脸识别概况1 1.1.1 何为人脸识别1 1.1.2 人脸识别的应用2 1.1.3 人脸识别的目标4 1.1.4 人脸识别的一般方法5 1.2 人脸识别发展状况 ...

  3. python人脸识别从入门到工程pdf_《Python人脸识别:从入门到工程实践》 ——1.1.2 人脸识别的应用...

    1.1.2 人脸识别的应用 近些年,随着人脸识别精度的提高,基于该项技术的产品也开始在我们生活中呈现"井喷"之势.例如,早在2016年2月,北京站就开启了"刷脸" ...

  4. Python人脸识别黑科技(二):教你使用python+Opencv完成人脸解锁

    继上一篇"Python人脸识别黑科技(一):50行代码运用Python+OpenCV实现人脸追踪+详细教程+快速入门+图像识",那么今天我们来讲关于使用python+opencv+ ...

  5. python人脸识别神器_教你用Python人脸识别自动开机,值得收藏

    这里将告诉您教你用Python人脸识别自动开机,值得收藏,具体操作方法:是不是厌烦了每次回家都要点击按钮打开电脑的操作? 你如果有看过我以前的推送,是不是厌烦了每次回家都要喊 "echo,t ...

  6. python人脸识别和人脸对比,face_recognition和OpenCV

    前言 先用OpenCV判断图片是否模糊,模糊的话需要重拍: 再用face_recognition检测图片中是否有人脸,有才接着进行下一步: 再用face_recognition计算图片中每张人脸的12 ...

  7. pythonweb开发-Python Web开发从入门到精通

    Python Web开发从入门到精通循序渐进地讲解了Python Web开发的核心知识,并通过具体实例的实现过程演示了Web开发程序的流程.Python Web开发从入门到精通共15章,内容包括Pyt ...

  8. python人脸识别、人脸关键点检测、性别检测

    python人脸识别.人脸关键点检测.性别检测 文章目录 根据人脸预测年龄性别和情绪 (python + keras)(三) 一款入门级的人脸.视频.文字检测以及识别的项目. age-gender-e ...

  9. 3分钟入门python_3分钟学完Python,直接从入门到精通「史上最强干货库」

    作为帅气小编,我已经把python一些模块的甩在这儿了qwq,只要你拿到这些干货,包你玩转python,直接冲向"大佬"的段位,如果已经学了C或者C++或者说如果你需要你的一段关键 ...

  10. Python人脸识别教程 - 基于Python的开源人脸识别库:离线识别率高达99.38%

    Python人脸识别教程 - 基于Python的开源人脸识别库:离线识别率高达99.38% 仅用 Python 和命令行就可以实现人脸识别的库开源了.该库使用 dlib 顶尖的深度学习人脸识别技术构建 ...

最新文章

  1. python使用imbalanced-learn的AllKNN方法进行下采样处理数据不平衡问题
  2. 删除系统Win7系统盘越来越小,系统盘清理技巧
  3. html怎么设置log区,javlog
  4. 协议簇:Ethernet Address Resolution Protocol (ARP) 解析
  5. em算法 实例 正态分布_Petuum提出序列生成学习算法通用框架
  6. MyEclipse 10, 2013, 2014 破解、注册码
  7. LeetCode(557)——反转字符串中的单词 III(JavaScript)
  8. xlrd,xlwt操作Excel实例
  9. 桩身弹性压缩计算公式_压缩弹簧弹力的计算公式
  10. php 采集网页 按xpath,网页数据采集相对XPATH使用教程 - 八爪鱼采集器
  11. Ajax的Promise应用
  12. mono linux 编译,Linux服务器编译安装Mono笔记
  13. html设计带图形的边框,css怎么设置图片的边框?
  14. python免费的实时语音交互(讯飞语音识别+青云客Robot)
  15. HTML页面刷新方法
  16. 使用hapi 要具备什么知识
  17. gateway sentinel 熔断 不起作用_民熔小课堂|关于熔断器保险丝的知识扫盲!
  18. 谷歌地图谷歌地图_为您的Google地图增添真实感
  19. 高通 Msm835平台充电功能的开发与调试
  20. Android TV-电视开发常用知识点讲解

热门文章

  1. 计算机office比赛,Office智慧丨“点亮未来”
  2. 终于!疫情之下,第一批企业没能熬住面临倒闭,员工被遣散,没能等来春暖花开!...
  3. matlab中条件数无穷大报错,matlab求条件数
  4. 什么是token?Android中token的使用讲解
  5. php起始符大全,以下哪种标签不是 PHP 起始 / 结束符
  6. PyQt5 结合 OpenCV 的开发之旅
  7. 史上最全最新前端面试题(不定期更新,有问题欢迎评论区对线)
  8. 史上最强Tomcat8性能优化
  9. 百度新闻资讯类信息爬虫--统计一年内关键词新闻的条数
  10. css针对IE单独设置样式