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 Web框架
Mar 20 Python
浅谈对yield的初步理解
May 29 Python
Python+tkinter使用80行代码实现一个计算器实例
Jan 16 Python
Python利用requests模块下载图片实例代码
Aug 12 Python
python GUI库图形界面开发之PyQt5滚动条控件QScrollBar详细使用方法与实例
Mar 06 Python
详解tensorflow2.x版本无法调用gpu的一种解决方法
May 25 Python
利用Vscode进行Python开发环境配置的步骤
Jun 22 Python
Python调用jar包方法实现过程解析
Aug 11 Python
Python tkinter之Bind(绑定事件)的使用示例
Feb 05 Python
MATLAB 全景图切割及盒图显示的实现步骤
May 14 Python
Python使用psutil库对系统数据进行采集监控的方法
Aug 23 Python
Pygame游戏开发之太空射击实战敌人精灵篇
Aug 05 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
让这部DC动画新作刷新你的认知
2020/03/03 欧美动漫
初次接触php抽象工厂模式(Elgg)
2010/03/21 PHP
让你成为更出色的PHP开发者的10个技巧
2011/02/25 PHP
PHP获取一年有几周以及每周开始日期和结束日期
2015/08/06 PHP
PHP后台微信支付和支付宝支付开发
2017/04/28 PHP
js面向对象 多种创建对象方法小结
2012/05/21 Javascript
jQuery操作Select的Option上下移动及移除添加等等
2013/11/18 Javascript
js中事件的处理与浏览器对象示例介绍
2013/11/29 Javascript
jQuery检测鼠标左键和右键点击的方法
2015/03/17 Javascript
javascript弹出拖动窗口
2015/08/11 Javascript
基于Vue2的移动端开发环境搭建详解
2016/11/03 Javascript
Vue.js通用应用框架-Nuxt.js的上手教程
2017/12/25 Javascript
node.js遍历目录的方法示例
2018/08/01 Javascript
vue中实现高德定位功能
2019/12/03 Javascript
Vue axios获取token临时令牌封装案例
2020/09/11 Javascript
解决出现Incorrect integer value: '' for column 'id' at row 1的问题
2017/10/29 Python
python实现在IDLE中输入多行的方法
2018/04/19 Python
Python RabbitMQ消息队列实现rpc
2018/05/30 Python
python实现多张图片拼接成大图
2019/01/15 Python
深入了解和应用Python 装饰器 @decorator
2019/04/02 Python
tensorflow 模型权重导出实例
2020/01/24 Python
如何使用Cython对python代码进行加密
2020/07/08 Python
Html5移动端获奖无缝滚动动画实现示例
2018/06/25 HTML / CSS
使用Html5中的cavas画一面国旗
2019/09/25 HTML / CSS
在线课程:Skillshare
2019/04/02 全球购物
女性时尚网购:Chic Me
2019/07/30 全球购物
定义一结构体数组表示分数,并求两个分数相加之和
2013/06/11 面试题
如果Session Bean得Remove方法一直都不被调用会怎么样
2012/07/14 面试题
学前教育毕业生自荐信
2013/10/29 职场文书
财务管理专业自荐信范文
2013/12/24 职场文书
农村婚礼证婚词
2014/01/08 职场文书
会计核算科岗位职责
2014/03/19 职场文书
2014年学生工作总结
2014/11/20 职场文书
在职证明书模板
2015/06/15 职场文书
幼儿园班级管理心得体会
2016/01/07 职场文书
Python字符串对齐方法使用(ljust()、rjust()和center())
2021/04/26 Python