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中的迭代器和生成器
Oct 26 Python
浅谈Python生成器generator之next和send的运行流程(详解)
May 08 Python
Python Flask-web表单使用详解
Nov 18 Python
Python 十六进制整数与ASCii编码字符串相互转换方法
Jul 09 Python
python 实现数字字符串左侧补零的方法
Dec 04 Python
对pyqt5之menu和action的使用详解
Jun 20 Python
Python OpenCV调用摄像头检测人脸并截图
Aug 20 Python
TensorFlow dataset.shuffle、batch、repeat的使用详解
Jan 21 Python
Python numpy多维数组实现原理详解
Mar 10 Python
PIP和conda 更换国内安装源的方法步骤
Sep 21 Python
如何利用Python写个坦克大战
Nov 18 Python
Python 视频画质增强
Apr 28 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
php自动加载机制的深入分析
2013/06/08 PHP
Thinkphp搜索时首页分页和搜索页保持条件分页的方法
2014/12/05 PHP
ExtJS 简介 让你知道extjs是什么
2008/12/29 Javascript
js实现单行文本向上滚动效果实例代码
2013/11/28 Javascript
在线一元二次方程计算器实例(方程计算器在线计算)
2013/12/22 Javascript
jQuery随手笔记之常用的jQuery操作DOM事件
2015/11/29 Javascript
浅析JavaScript中的变量复制、参数传递和作用域链
2016/01/13 Javascript
Javascript 基础---Ajax入门必看
2016/07/06 Javascript
Node.js 实现简单小说爬虫实例
2016/11/18 Javascript
Angular.js实现动态加载组件详解
2017/05/28 Javascript
详解在Vue中使用TypeScript的一些思考(实践)
2018/07/06 Javascript
Antd下拉选择,自动匹配功能的实现
2020/10/24 Javascript
[31:33]2014 DOTA2国际邀请赛中国区预选赛 TongFu VS DT 第一场
2014/05/23 DOTA
python 正则表达式 概述及常用字符
2009/05/04 Python
Python合并字符串的3种方法
2015/05/21 Python
对python sklearn one-hot编码详解
2018/07/10 Python
用python打印1~20的整数实例讲解
2019/07/01 Python
Pandas_cum累积计算和rolling滚动计算的用法详解
2019/07/04 Python
Django框架模型简单介绍与使用分析
2019/07/18 Python
pandas实现excel中的数据透视表和Vlookup函数功能代码
2020/02/14 Python
python3+opencv生成不规则黑白mask实例
2020/02/19 Python
python产生模拟数据faker库的使用详解
2020/11/04 Python
完美解决Pycharm中matplotlib画图中文乱码问题
2021/01/11 Python
HTML5中drawImage用法分析
2014/12/01 HTML / CSS
Dr. Martens马汀博士官网:马丁靴始祖品牌
2016/10/15 全球购物
Kangol帽子官网:坎戈尔袋鼠
2018/09/26 全球购物
自然健康的概念:Natural Healthy Concepts
2020/01/26 全球购物
描述内存分配方式以及它们的区别
2016/10/15 面试题
为什么group by 和order by会使查询变慢
2014/05/16 面试题
优秀生推荐信范文
2013/11/28 职场文书
互联网电子商务专业毕业生求职信
2014/03/18 职场文书
学生自我评语大全
2014/04/18 职场文书
融资租赁计划书
2014/04/29 职场文书
践行三严三实心得体会
2014/10/13 职场文书
大学生助学金感谢信
2015/01/21 职场文书
python实现简单的井字棋
2021/05/26 Python