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的迭代器与生成器实例详解
Jul 16 Python
python轻松查到删除自己的微信好友
Jan 10 Python
使用python遍历指定城市的一周气温
Mar 31 Python
疯狂上涨的Python 开发者应从2.x还是3.x着手?
Nov 16 Python
Flask框架URL管理操作示例【基于@app.route】
Jul 23 Python
django框架实现模板中获取request 的各种信息示例
Jul 01 Python
Python 实现输入任意多个数,并计算其平均值的例子
Jul 16 Python
django创建最简单HTML页面跳转方法
Aug 16 Python
Python使用itchat模块实现简单的微信控制电脑功能示例
Aug 26 Python
基于Keras 循环训练模型跑数据时内存泄漏的解决方式
Jun 11 Python
opencv 分类白天与夜景视频的方法
Jun 05 Python
python图像处理 PIL Image操作实例
Apr 09 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
phpmyadmin导入(import)文件限制的解决办法
2009/12/11 PHP
一步一步学习PHP(5) 类和对象
2010/02/16 PHP
帝国cms常用标签汇总
2015/07/06 PHP
PHP快速生成各种信息提示框的方法
2016/02/03 PHP
简单介绍PHP非阻塞模式
2016/03/03 PHP
浅谈htmlentities 、htmlspecialchars、addslashes的使用方法
2016/12/09 PHP
PHP实现15位身份证号转18位的方法分析
2019/10/16 PHP
Nigma vs Liquid BO3 第一场2.13
2021/03/10 DOTA
js页面跳转的常用方法整理
2013/10/18 Javascript
jQuery中的val()示例应用
2014/02/26 Javascript
jQuery中is()方法用法实例
2015/01/06 Javascript
JavaScript定时器和优化的取消定时器方法
2015/07/03 Javascript
JS实现的鼠标跟随代码(卡通手型点击效果)
2015/10/26 Javascript
jQuery抛物线运动实现方法(附完整demo源码下载)
2016/01/08 Javascript
详解Bootstrap各式各样的按钮(推荐)
2016/12/13 Javascript
Vue 将后台传过来的带html字段的字符串转换为 HTML
2018/03/29 Javascript
JS实现鼠标拖拽盒子移动及右键点击盒子消失效果示例
2019/01/29 Javascript
JS中超越现实的匿名函数用法实例分析
2019/06/21 Javascript
简单了解JavaScript中的执行上下文和堆栈
2019/06/24 Javascript
vue+django实现一对一聊天功能的实例代码
2019/07/17 Javascript
vue 路由守卫(导航守卫)及其具体使用
2020/02/25 Javascript
vue3 watch和watchEffect的使用以及有哪些区别
2021/01/26 Vue.js
[52:31]VP vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python使用reportlab实现图片转换成pdf的方法
2015/05/22 Python
python制作企业邮箱的爆破脚本
2016/10/05 Python
Python简单实现自动删除目录下空文件夹的方法
2017/08/29 Python
解决python通过cx_Oracle模块连接Oracle乱码的问题
2018/10/18 Python
使用python-cv2实现视频的分解与合成的示例代码
2020/10/26 Python
四川internet信息高速公路(C#)笔试题
2012/02/29 面试题
十一个高级MySql面试题
2014/10/06 面试题
给实习单位的感谢信
2014/02/01 职场文书
市场营销个人求职信范文
2014/02/02 职场文书
工商企业管理专业自荐信范文
2014/04/12 职场文书
小学英语教学经验交流材料
2015/11/02 职场文书
2019年工作总结范文
2019/05/21 职场文书
golang 语言中错误处理机制
2021/08/30 Golang