卷积神经网络(CNN)概览

本文详细介绍卷积神经网络(CNN)的搭建流程,包括卷积层、批标准化层、激活层、池化层和全连接层的设置,以及如何通过六步法训练MNIST和Fashion数据集,实现图像识别应用。

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

卷积神经网络搭建

使用六步法搭建全连接网络训练mnist数据集和fashion数据集,实现图像识别应用,全连接中的每个神经元与前后相邻层的神经元都有连接关系。实践证明,全连接网络对识别和预测都有非常好的效果。但是,在实现过程中,仅用两层网络训练这样的灰度图片数据,就有几十万级的带训练参数。而在实际项目中,输入的数据是具有更高像素的彩色图片,随着隐藏层的层数增加,网络规模过大,待优化参数过多,很容易使模型过拟合,为了减少带训练的参数,我们会先对原始图片进行特征提取,把提取的特征送给全连接网络,让全连接网络输出识别结果。

  • 卷积Convolutional层
  • 批标准化BN层
  • 激活Activation层
  • 池化Pooling层
  • 舍弃Dropout层

CBAPD

对输入特征进行特征提取

  • 全连接FC层
class Baseline(Model):
    def __init__(self):
        super(Baseline, self).__init__()
        self.c1 = Conv2D(filters=6, kernel_size=(5, 5), padding='same')  # 卷积层  C
        self.b1 = BatchNormalization()  # BN层  B
        self.a1 = Activation('relu')  # 激活层  A
        self.p1 = MaxPool2D(pool_size=(2, 2), strides=2, padding='same')  # 池化层  P
        self.d1 = Dropout(0.2)  # dropout层  D

		# 全连接层FC
        self.flatten = Flatten()
        self.f1 = Dense(128, activation='relu')
        self.d2 = Dropout(0.2)
        self.f2 = Dense(10, activation='softmax')

    def call(self, x):
        x = self.c1(x)
        x = self.b1(x)
        x = self.a1(x)
        x = self.p1(x)
        x = self.d1(x)

        x = self.flatten(x)
        x = self.f1(x)
        x = self.d2(x)
        y = self.f2(x)
        return y

记住:卷积是一种有效的特征提取方法卷积就是特征提取器CBAPD

六步法搭建全连接网络

  1. import——导入所需的各种库和包
  2. x_train, y_train——导入数据集、自制数据集、数据增强
  3. model=tf.keras.models.Sequential /class MyModel(Model) model=MyModel——定义模型
  4. model.compile——配置模型
  5. model.fit——训练模型、断点续训
  6. model.summary——参数提取、acc/loss可视化、前向推理实现应用
卷积神经网络中的卷积计算:

一般会用一个正方形的卷积核,按指定步长,在输入特征图上滑动遍历输入特征图中的每个像素点。每一个步长,卷积核会与输入特征图出现重合区域,重合区域对应元素相乘、求和再加上偏置项得到输出特征的一个像素点。

输入特征图的深度(channel数) ,决定了当前层卷积核的深度;
当前层卷积核的个数,决定了当前层输出特征图的深度。
具体可以参考:一文让你彻底了解卷积神经网络

卷积神经网络涉及的一些概念
  • 卷积计算过程
  • 感受野
    感受野(Receptive Field) 是卷积神经网络各输出特征图中的每个像素点,在原始输入图片上映射区域的大小。
  • 全零填充(Padding)
self.c1 = Conv2D(filters=6, kernel_size=(5, 5), padding='same')  # 卷积层  C
  • 权值共享
    所谓的权值共享就是说,给一张输入图片,用一个filter去扫这张图,filter里面的数就叫权重,这张图每个位置是被同样的filter扫的,所以权重是一样的,也就是共享。
  • TF描述卷积计算层
  • 批标准化(Batch Normalization, BN)
    标准化:使数据符合0均值,1为标准差的分布。批标准化:对一小批数据(batch) ,做标准化处理。这个过程通常在卷积操作和激活函数之间。
    在做BN时,为了防止训练结果丧失非线性化能力,还为每个卷积核引入可训练参数y和β,,调整批归一化的力度。
self.b1 = BatchNormalization()  # BN层
  • 池化(Pooling)
    池化用于减少特征数据量,最大值池化可提取图片纹理,均值池化可保留背景特征。
self.p1 = MaxPool2D(pool_size=(2, 2), strides=2, padding='same')  # 池化层
  • 舍弃(Dropout)
    在神经网络训练时,将一部分神经元按照一定概率从神经网络中暂时舍弃。神经网络使用时,被舍弃的神经元恢复连接。
self.d1 = Dropout(0.2)  # dropout层
  • cifar10数据集
  • 卷积神经网络搭建示例
  • 五个经典卷积神经网络LeNet、AlexNet、 VGGNet、 InceptionNet、 ResNet

推荐阅读:
卷积神经网络超详细介绍
卷积神经网络CNN过程(前向和反向)
一文让你彻底了解卷积神经网络
详解卷积神经网络(CNN)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值