keras中的卷积层&池化层的用法


Posted in Python onMay 22, 2020

卷积层

创建卷积层

首先导入keras中的模块

from keras.layers import Conv2D

卷积层的格式及参数:

Conv2D(filters, kernel_size, strides, padding, activation='relu', input_shape)

filters: 过滤器数量

kernel_size:指定卷积窗口的高和宽的数字

strides: 卷积stride,如果不指定任何值,则strides设为1

padding: 选项包括'valid'和'same',默认值为'valid'

activation: 通常为'relu',如果不指定任何值,则不应用任何激活函数,通常应该向网络中每个卷积层添加一个Relu激活函数

如果卷积层出现在输入层之后,必须提供另一个input_shape参数:

input_shape: 指定输入的高度、宽度和深度的元组;如果卷积层不是网络的第一个层级,则不应该包含input_shape参数。

示例1:

假设我要构建一个 CNN,输入层接受的是 200 x 200 像素(对应于高 200、宽 200、深 1 的三维数组)的灰度图片。然后,假设我希望下一层级是卷积层,具有 16 个过滤器,每个宽和高分别为 2。在进行卷积操作时,我希望过滤器每次跳转 2 个像素。并且,我不希望过滤器超出图片界限之外;也就是说,我不想用 0 填充图片。

要构建该卷积层,我将使用下面的代码

Conv2D(filters=16, kernel_size=2, strides=2, activation='relu', input_shape=(200, 200, 1))

示例 2

假设我希望 CNN 的下一层级是卷积层,并将示例 1 中构建的层级作为输入。假设新层级是 32 个过滤器,每个的宽和高都是 3。在进行卷积操作时,我希望过滤器每次移动 1 个像素。我希望卷积层查看上一层级的所有区域,因此不介意过滤器在进行卷积操作时是否超过上一层级的边缘。

然后,要构建此层级,我将使用以下代码:

Conv2D(filters=32, kernel_size=3, padding='same', activation='relu')

卷积层中的参数数量

卷积层中的参数数量取决于filters, kernel_size, input_shape的值

K: 卷积层中的过滤器数量, K=filters

F:卷积过滤器的高度和宽度, F = kernal_size

D_in: 上一层级的深度, D_in是input_shape元组中的最后一个值

卷积层中的参数数量计算公式为:K * F * F * D_in + K

卷积层的形状

卷积层的形状取决于kernal_size, input_shape, padding, stride的值

K: 卷积层中的过滤器数量,K = filters

F: 卷积过滤器的高度和宽度, F = kernal_size

H_in: 上一层级的高度

W_in: 上一层级的宽度

S: stride

卷积层的深度始终为过滤器数量K

如果padding=‘same', 那么卷积层的空间维度计算公式如下:

height = ceil(float(H_in) / float(S))
width = ceil(float(W_in) / float(S))

如果padding = ‘valid', 那么卷积层的空间维度计算公式如下:

height = ceil(float(H_in - F + 1) / float(S))
width = ceil(float(W_in - F + 1) / float(S))

可以使用如下形式检测卷积层的维度:

from keras.models import Sequential
from keras.layers import Conv2D

model = Sequential()
model.add(Conv2D(filters=32, kernel_size=3, strides=2, padding='same', 
 activation='relu', input_shape=(128, 128, 3)))
model.summary()

池化层

keras中的最大池化层

创建池化层,首先导入keras中的模块

from keras.layers import MaxPooling2D

然后用以下形式创建池化层

MaxPooling2D(pool_size, strides, padding)

参数

pool_size:指定池化窗口高度和宽度的数字

strides:垂直和水平stride,默认参数为pool_size

padding:选项包括'valid'和'same',默认参数为'valid'

示例:

假设我要构建一个 CNN,并且我想通过在卷积层后面添加最大池化层,降低卷积层的维度。假设卷积层的大小是 (100, 100, 15),我希望最大池化层的大小为 (50, 50, 15)。

要实现这一点,我可以在最大池化层中使用 2x2 窗口,stride 设为 2,代码如下:

MaxPooling2D(pool_size=2, strides=2)

如果你想将 stride 设为 1,但是窗口大小依然保留为 2x2,则使用以下代码:

MaxPooling2D(pool_size=2, strides=1)

可以使用如下形式检测最大池化层的维度:

from keras.models import Sequential
from keras.layers import MaxPooling2D

model = Sequential()
model.add(MaxPooling2D(pool_size=2, strides=2, input_shape=(100, 100, 15)))
model.summary()

以上这篇keras中的卷积层&池化层的用法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用python开发vim插件及心得分享
Nov 04 Python
举例讲解Linux系统下Python调用系统Shell的方法
Nov 07 Python
Python利用BeautifulSoup解析Html的方法示例
Jul 30 Python
python利用有道翻译实现"语言翻译器"的功能实例
Nov 14 Python
运用TensorFlow进行简单实现线性回归、梯度下降示例
Mar 05 Python
Python元组知识点总结
Feb 18 Python
pymongo中group by的操作方法教程
Mar 22 Python
Python2.7版os.path.isdir中文路径返回false的解决方法
Jun 21 Python
Django ImageFiled上传照片并显示的方法
Jul 28 Python
python3实现用turtle模块画一棵随机樱花树
Nov 21 Python
使用 Python 合并多个格式一致的 Excel 文件(推荐)
Dec 09 Python
django项目中使用云片网发送短信验证码的实现
Jan 19 Python
Keras Convolution1D与Convolution2D区别说明
May 22 #Python
Python pip安装模块提示错误解决方案
May 22 #Python
keras中的backend.clip用法
May 22 #Python
Pycharm修改python路径过程图解
May 22 #Python
TensorFlow keras卷积神经网络 添加L2正则化方式
May 22 #Python
Django 如何使用日期时间选择器规范用户的时间输入示例代码详解
May 22 #Python
python实现猜单词游戏
May 22 #Python
You might like
经典的PHPer为什么被认为是草根?
2007/04/02 PHP
php基于PDO连接MSSQL示例DEMO
2016/07/13 PHP
多个js与css文件的合并方法详细说明
2012/12/26 Javascript
解析js中获得父窗口链接getParent方法以及各种打开窗口的方法
2013/06/19 Javascript
JS中typeof与instanceof之间的区别总结
2013/11/14 Javascript
jQuery select表单提交省市区城市三级联动核心代码
2014/06/09 Javascript
JS+CSS实现精美的二级导航效果代码
2015/09/17 Javascript
将List对象列表转换成JSON格式的类实现方法
2016/07/04 Javascript
微信小程序 wx.request(接口调用方式)详解及实例
2016/11/23 Javascript
微信小程序 判断手机号的实现代码
2017/04/19 Javascript
微信小程序实现人脸识别
2018/05/25 Javascript
如何优雅地在Node应用中进行错误异常处理
2019/11/25 Javascript
vue v-for出来的列表,点击某个li使得当前被点击的li字体变红操作
2020/07/17 Javascript
maptalks+three.js+vue webpack实现二维地图上贴三维模型操作
2020/08/10 Javascript
jquery插件懒加载的示例
2020/10/24 jQuery
Python生成随机验证码的两种方法
2015/12/22 Python
Windows上使用virtualenv搭建Python+Flask开发环境
2016/06/07 Python
Python中使用多进程来实现并行处理的方法小结
2017/08/09 Python
对Python 3.5拼接列表的新语法详解
2018/11/08 Python
Python Pywavelet 小波阈值实例
2019/01/09 Python
Python玩转PDF的各种骚操作
2019/05/06 Python
使用OpenCV实现仿射变换—平移功能
2019/08/29 Python
Python爬虫爬取Bilibili弹幕过程解析
2019/10/10 Python
python 如何读、写、解析CSV文件
2021/03/03 Python
推荐WEB开发者最佳HTML5和CSS3代码生成器
2015/11/24 HTML / CSS
感恩节活动方案
2014/01/27 职场文书
优秀中学生事迹材料
2014/01/31 职场文书
运动会入场词100字
2014/02/06 职场文书
团日活动总结书格式
2014/05/08 职场文书
政府班子四风问题整改措施思想汇报
2014/10/08 职场文书
升职感谢信
2015/01/22 职场文书
三方协议书
2015/01/27 职场文书
总经理助理岗位职责范本
2015/03/31 职场文书
2020年元旦祝福语录,总有适合你的
2019/12/31 职场文书
导游词之昭君岛
2020/01/17 职场文书
postgresql之greenplum字符串去重拼接方式
2023/05/08 PostgreSQL