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安装第三方库及常见问题处理方法汇总
Sep 13 Python
深入理解NumPy简明教程---数组2
Dec 17 Python
PyCharm在win10的64位系统安装实例
Nov 26 Python
python实现飞机大战微信小游戏
Mar 21 Python
python实现写数字文件名的递增保存文件方法
Oct 25 Python
Python使用pandas和xlsxwriter读写xlsx文件的方法示例
Apr 09 Python
python tkinter图形界面代码统计工具(更新)
Sep 18 Python
Python编译为二进制so可执行文件实例
Dec 23 Python
Python定时器线程池原理详解
Feb 26 Python
Python如何存储数据到json文件
Mar 09 Python
python制作一个简单的gui 数据库查询界面
Nov 19 Python
pandas中pd.groupby()的用法详解
Jun 16 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
dede3.1分页文字采集过滤规则详说(图文教程)续二
2007/04/03 PHP
WordPress中用于获取文章信息以及分类链接的函数用法
2015/12/18 PHP
Laravel学习基础之migrate的使用教程
2017/10/11 PHP
HTML长文本截取含有HTML代码同样适用的两种方法
2013/07/31 Javascript
a标签的href与onclick事件的区别详解
2014/11/12 Javascript
浅析JavaScript事件和方法
2015/02/28 Javascript
JavaScript知识点总结(五)之Javascript中两个等于号(==)和三个等于号(===)的区别
2016/05/31 Javascript
Vue自定义指令详解
2017/07/28 Javascript
打字效果动画的4种实现方法(超简单)
2017/10/18 Javascript
从setTimeout看js函数执行过程
2017/12/19 Javascript
JS实现选项卡效果的代码实例
2019/05/20 Javascript
VUE.CLI4.0配置多页面入口的实现
2019/11/25 Javascript
举例讲解Python编程中对线程锁的使用
2016/07/12 Python
python面向对象_详谈类的继承与方法的重载
2017/06/07 Python
浅谈用Python实现一个大数据搜索引擎
2017/11/28 Python
Python从零开始创建区块链
2018/03/06 Python
Python cookbook(字符串与文本)针对任意多的分隔符拆分字符串操作示例
2018/04/19 Python
把pandas转换int型为str型的方法
2019/01/29 Python
Python QQBot库的QQ聊天机器人
2019/06/19 Python
django框架防止XSS注入的方法分析
2019/06/21 Python
python覆盖写入,追加写入的实例
2019/06/26 Python
表单button的outline在firefox浏览器下的问题
2012/12/24 HTML / CSS
纯CSS3实现带动画效果导航菜单无需js
2013/09/27 HTML / CSS
HTML5离线缓存Manifest是什么
2016/03/09 HTML / CSS
7 For All Mankind官网:美国加州洛杉矶的高级牛仔服装品牌
2018/12/20 全球购物
莫斯科大型旅游休闲商品超市:Camping.ru
2020/09/16 全球购物
Oracle里面常用的数据字典有哪些
2014/02/14 面试题
2014年幼儿园教研工作总结
2014/12/04 职场文书
小马王观后感
2015/06/11 职场文书
2015年政治教研组工作总结
2015/07/22 职场文书
互联网的下一个风口:新的独角兽将诞生
2019/08/02 职场文书
html+css合并表格边框的示例代码
2021/03/31 HTML / CSS
MySQL分库分表与分区的入门指南
2021/04/22 MySQL
Redis集群的关闭与重启操作
2021/07/07 Redis
Python开发五子棋小游戏
2022/05/02 Python
基于Android10渲染Surface的创建过程
2022/08/14 Java/Android