【深度学习图像识别课程】keras实现CNN系列:(3)CNN应用场景以及卷积层、池化层介绍

本文介绍了卷积神经网络(CNN)在多个领域的应用,包括计算机视觉、语音用户界面及自然语言处理等。同时深入探讨了CNN的关键组件——卷积层和池化层的工作原理及其在Keras中的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在上一篇博文中MLP实现MNIST分类,由于MLP存在的缺点,我们引入CNN。

一、CNN(convolutional neutral network卷积神经网络)的应用

语音用户界面,自然语言处理,计算机视觉等等。

微软的WaveNet模型:将text转化成voice;学习用户的声音,并生成

分类情感:作者心情,影评等

图像分类

指导人工智能代理玩游戏:击球,看图说词,围棋

无人机

图像中文字识别:识别字母、数字、符号图片。

                         无人驾驶识别路标

                         google通过训练算法识别街景图片中的门牌号,构建更准确的全球街道地图

 

二、卷积层介绍

1、卷积层原理

检测一种性质需要一种过滤器filter,比如下图中的斜对角线过滤器,可以看出我们要找的就是这种特征。因此,我们经常需要可视化滤波器。

CNN学习时,不需要指定滤波器的规律和权重,都是从数据中学习。

 

2、stride和填充

图像m*n,过滤器a*a,stride。当stride > 1时,可能出现移动到最后,不为0的情况。

(m-a)/stride不为0时,如果只移动(m-a)/stride下取整次,则会丢失边缘信息。

                                如果移动(m-a)/stride上取整次,则需要填充。

                               填充值为0,或者与邻近一致。

垂直方向同理。

3、keras中的卷积层

from keras.layers import Conv2D
Conv2D(filters=16, kernel_size=2, strides=2, padding='same', activation='relu', input_shape=(200,200,1))
  • filters - 过滤器数量k。
  • kernel_size - 指定(方形)卷积窗口的高和宽的数字。可以是数字,也可以是元组。比如F,或者(F,F)
  • strides - 卷积 stride。如果不指定任何值,则 s 设为 1
  • padding - 选项包括 'valid' 和 'same'。如果不指定任何值,则 padding 设为 'valid'。不接受填充,也就是边缘有多余,也不进行处理了,可能损失边缘信息。
  • activation - 通常为 'relu'。如果未指定任何值,则不应用任何激活函数。强烈建议你向网络中的每个卷积层添加一个 ReLU 激活函数。
  • input_shape - 如果该层是第一层,一定要指定(X, Y, Z)

4、卷积层维度

from keras.models import Sequential
from keras.layers import Conv2D
model = Sequential()
model.add(Conv2D(filters=16, kernel_size=2, strides=2, padding='valid', activation='relu', input_shape=(200,200,1)))

model.summary()

卷积层参数个数 = K*F*F*Z + K

卷积层深度 = K

卷积层空间维度:padding = 'same'   XX = ceil(X/S),           YY = ceil(Y/S)

                         padding = 'valid'    XX = ceil((X-F+1)/S),  YY = ceil((Y-F+1)/S)

该例子卷积层参数个数:16个滤波器*(每个滤波器2*2个权重*1) + 每个滤波器1个bias*16个滤波器 = 80

卷积层深度:滤波器个数16

卷积层的空间维度:ceil((200-2+1)/2)=100

 

三、池化层

参考文档:https://keras.io/layers/pooling/

1、池化层原理

当过滤层很多,造成卷积层参数很多的情况下,有可能出现过拟合的情况。因此,需要降维。池化层就是这个作用。池化层一般将卷积层当作输入。

池化层主要有2种类型。

(1)最大池化层

指定窗口大小和stride,取出窗口中最大的值做为新的输出。最终维数降低。

如下例子中,window_size = 2*2, stride = 2,输出变为输入的一半。

(2)全局平均池化层

既不指定窗口大小,也不指定stride,更极端的降维池化类型。一个特征映射最后就变成一个值,即全局平均值。

 

 

形象化描述:

如果说,卷积层后是一堆煎饼。则经过最大池化层,是一堆变小的煎饼;经过全局均值池化层,是一堆面包屑。

 

2、keras中的池化层实现---最大池化层

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()

MaxPooling2D的参数:

 

  • pool_size - 指定池化窗口高度和宽度的数字。
  • strides - 垂直和水平 stride。如果不指定任何值,则 strides 默认为 pool_size
  • padding - 选项包括 'valid' 和 'same'。如果不指定任何值,则 padding 设为 'valid'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值