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 相关文章推荐
Django数据库表反向生成实例解析
Feb 06 Python
Tensorflow卷积神经网络实例进阶
May 24 Python
python3监控CentOS磁盘空间脚本
Jun 21 Python
Python理解递归的方法总结
Jan 28 Python
Python查找数组中数值和下标相等的元素示例【二分查找】
Feb 13 Python
Python基础之文件读取的讲解
Feb 16 Python
pyqt5 实现 下拉菜单 + 打开文件的示例代码
Jun 20 Python
Python 余弦相似度与皮尔逊相关系数 计算实例
Dec 23 Python
python实现异常信息堆栈输出到日志文件
Dec 26 Python
在Mac中PyCharm配置python Anaconda环境过程图解
Mar 11 Python
Django通过json格式收集主机信息
May 29 Python
python+selenium实现12306模拟登录的步骤
Jan 21 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
PHP5.2下chunk_split()函数整数溢出漏洞 分析
2007/06/06 PHP
php排序算法(冒泡排序,快速排序)
2012/10/09 PHP
php curl基本操作详解
2013/07/23 PHP
PHP中ltrim与rtrim去除左右空格及特殊字符实例
2016/01/07 PHP
Laravel5.1数据库连接、创建数据库、创建model及创建控制器的方法
2016/03/29 PHP
php5与php7的区别点总结
2019/10/11 PHP
基于jquery的滑动样例代码
2010/11/20 Javascript
Jquery中对数组的操作代码
2011/08/12 Javascript
跨域传值即主页面与iframe之间互相传值
2013/12/09 Javascript
JS获取图片高度宽度的方法分享
2015/04/17 Javascript
AngularJS中$http服务常用的应用及参数
2016/08/22 Javascript
jQuery EasyUI常用数据验证汇总
2016/09/18 Javascript
js初始化验证实例详解
2016/11/26 Javascript
vue-router 中router-view不能渲染的解决方法
2017/05/23 Javascript
利用SpringMVC过滤器解决vue跨域请求的问题
2018/02/10 Javascript
Vue 自定义动态组件实例详解
2018/03/28 Javascript
基于vue.js中关于下拉框的值默认及绑定问题
2018/08/22 Javascript
详解React native fetch遇到的坑
2018/08/30 Javascript
Vue异步组件处理路由组件加载状态的解决方案
2018/09/07 Javascript
Vue实现点击显示不同图片的效果
2019/08/10 Javascript
jQuery Raty星级评分插件使用方法实例分析
2019/11/25 jQuery
JavaScript碰撞检测原理及其实现代码
2020/03/12 Javascript
JavaScript通如何过RGraph实现动态仪表盘
2020/10/15 Javascript
python中查找excel某一列的重复数据 剔除之后打印
2013/02/10 Python
Python中无限元素列表的实现方法
2014/08/18 Python
python机器学习理论与实战(五)支持向量机
2018/01/19 Python
python实现猜数字小游戏
2020/03/24 Python
Python selenium抓取虎牙短视频代码实例
2020/03/02 Python
canvas实现图片马赛克的示例代码
2018/03/26 HTML / CSS
复核员上岗演讲稿
2014/01/05 职场文书
医院实习接收函
2014/01/12 职场文书
我爱我家教学反思
2014/05/01 职场文书
2014年个人技术工作总结
2014/12/08 职场文书
开展警示教育活动总结
2015/05/09 职场文书
运动会跳远广播稿
2015/08/19 职场文书
nginx 配置指令之location使用详解
2022/05/25 Servers