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访问类中docstring注释的实现方法
May 04 Python
python解决网站的反爬虫策略总结
Oct 26 Python
python3+pyqt5+itchat微信定时发送消息的方法
Feb 20 Python
对python中GUI,Label和Button的实例详解
Jun 27 Python
Window10下python3.7 安装与卸载教程图解
Sep 30 Python
python requests模拟登陆github的实现方法
Dec 26 Python
Python图像处理库PIL的ImageDraw模块介绍详解
Feb 26 Python
Python开发之身份证验证库id_validator验证身份证号合法性及根据身份证号返回住址年龄等信息
Mar 20 Python
浅谈Python 函数式编程
Jun 20 Python
python 爬取华为应用市场评论
May 29 Python
python标准库ElementTree处理xml
May 20 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正则表达式之定界符和原子介绍
2012/10/05 PHP
PHP自动识别字符集并完成转码详解
2013/08/02 PHP
PHP二维数组矩形转置实例
2016/07/20 PHP
PHP判断json格式是否正确的实现代码
2017/09/20 PHP
解决thinkPHP 5 nginx 部署时,只跳转首页的问题
2019/10/16 PHP
laravel框架学习笔记之组件化开发实现方法
2020/02/01 PHP
JavaScript中的new的使用方法与注意事项
2007/05/16 Javascript
JQuery 学习笔记 选择器之五
2009/07/23 Javascript
jqPlot Option配置对象详解
2009/07/25 Javascript
监控 url fragment变化的js代码
2010/04/19 Javascript
javascript日期验证之输入日期大于等于当前日期
2015/12/13 Javascript
Bootstrap每天必学之标签页(Tab)插件
2020/08/09 Javascript
零基础轻松学JavaScript闭包
2016/12/30 Javascript
微信小程序动态的加载数据实例代码
2017/04/14 Javascript
angularjs封装$http为factory的方法
2017/05/18 Javascript
vuejs手把手教你写一个完整的购物车实例代码
2017/07/06 Javascript
解决vue中使用proxy配置不同端口和ip接口问题
2019/08/14 Javascript
layui加载数据显示loading加载完成loading消失的实例代码
2019/09/23 Javascript
实例讲解Python的函数闭包使用中应注意的问题
2016/06/20 Python
Python实现的计算马氏距离算法示例
2018/04/03 Python
详解python编译器和解释器的区别
2019/06/24 Python
python语言是免费还是收费的?
2020/06/15 Python
实现Python3数组旋转的3种算法实例
2020/09/16 Python
Python内存泄漏和内存溢出的解决方案
2020/09/26 Python
用gpu训练好的神经网络,用tensorflow-cpu跑出错的原因及解决方案
2021/03/03 Python
html5实现多文件的上传示例代码
2014/02/13 HTML / CSS
NICKIS.com荷兰:设计师儿童时装
2020/01/08 全球购物
如何启动时不需输入用户名与密码
2014/05/09 面试题
LINUX下线程,GDI类的解释
2016/12/14 面试题
师范学院美术系毕业生自我鉴定
2014/01/29 职场文书
装饰工程师岗位职责
2014/06/08 职场文书
中国梦演讲稿开场白
2014/08/28 职场文书
支部书记四风对照材料
2014/08/28 职场文书
学校党员干部承诺书
2015/05/04 职场文书
Go 自定义package包设置与导入操作
2021/05/06 Golang
Python实现的扫码工具居然这么好用!
2021/06/07 Python