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发布模块的步骤分享
Feb 21 Python
Python实现的HMacMD5加密算法示例
Apr 03 Python
解决Python获取字典dict中不存在的值时出错问题
Oct 17 Python
Python二叉树的遍历操作示例【前序遍历,中序遍历,后序遍历,层序遍历】
Dec 24 Python
Python设计模式之命令模式原理与用法实例分析
Jan 11 Python
Python日期时间Time模块实例详解
Apr 15 Python
Golang GBK转UTF-8的例子
Aug 26 Python
python自动循环定时开关机(非重启)测试
Aug 26 Python
在Python中用GDAL实现矢量对栅格的切割实例
Mar 11 Python
python thrift 实现 单端口多服务的过程
Jun 08 Python
python如何从键盘获取输入实例
Jun 18 Python
PyQt5 QDockWidget控件应用详解
Aug 12 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
无线电广播的开始
2002/01/30 无线电
用PHP来写记数器(详细介绍)
2006/10/09 PHP
很实用的一个完整email发送程序
2006/10/09 PHP
php数组对百万数据进行排除重复数据的实现代码
2010/06/08 PHP
php使用异或实现的加密解密实例
2013/09/04 PHP
PHP使用Session实现上传进度功能详解
2019/08/06 PHP
JQuery SELECT单选模拟jQuery.select.js
2009/11/12 Javascript
Javascript 获取链接(url)参数的方法[正则与截取字符串]
2010/02/09 Javascript
Javascript 倒计时源代码.(时.分.秒) 详细注释版
2011/05/09 Javascript
Js参数值中含有单引号或双引号问题的解决方法
2013/11/06 Javascript
Knockoutjs 学习系列(一)ko初体验
2016/06/07 Javascript
Bootstrap弹出带合法性检查的登录框实例代码【推荐】
2016/06/23 Javascript
vue2.0 axios前后端数据处理实例代码
2017/06/30 Javascript
React入门教程之Hello World以及环境搭建详解
2017/07/11 Javascript
js中json对象和字符串的理解及相互转化操作实现方法
2017/09/22 Javascript
Vue.js中 v-model 指令的修饰符详解
2018/12/03 Javascript
JAVA面试题 static关键字详解
2019/07/16 Javascript
JavaScript进阶(四)原型与原型链用法实例分析
2020/05/09 Javascript
js实现拖拽元素选择和删除
2020/08/25 Javascript
在Python中使用全局日志时需要注意的问题
2015/05/06 Python
详解使用python crontab设置linux定时任务
2016/12/08 Python
TensorFlow实现随机训练和批量训练的方法
2018/04/28 Python
对Python 多线程统计所有csv文件的行数方法详解
2019/02/12 Python
Python使用numpy模块实现矩阵和列表的连接操作方法
2019/06/26 Python
python logging日志模块原理及操作解析
2019/10/12 Python
Python文件操作函数用法实例详解
2019/12/24 Python
python 负数取模运算实例
2020/06/03 Python
详解Python高阶函数
2020/08/15 Python
python map比for循环快在哪
2020/09/21 Python
Python pip 常用命令汇总
2020/10/19 Python
三只松鼠官方旗舰店:全网坚果销售第1
2017/11/25 全球购物
英国Boots旗下太阳镜网站:Boots Designer Sunglasses
2018/07/07 全球购物
小学二年级学生评语
2014/04/21 职场文书
项目经理任命书内容
2014/06/06 职场文书
2015年教师节感恩寄语
2015/03/23 职场文书
会计稽核岗位职责
2015/04/13 职场文书