卷积神经网络的基本结构

卷积神经网络的基本结构

与传统的全连接神经网络一样,卷积神经网络依然是一个层级网络,只不过层的功能和形式发生了变化。

典型的CNN结构包括:

  1. 数据输入层(Input Layer)
  2. 卷积层(Convolutional Layer)
  3. 激活层(Activation Layer)
  4. 池化层(Pooling Layer)
  5. 全连接层(Full Connection Layer)
  6. 损失层(Loss Function Layer)
  7. 精度层(Accuracy Layer)

1.数据输入层

数据输入层不属于 网络结构。与传统的全连接神经网络不同,卷积神经网络的输入层是原始图像 ,而非提取的信息,因此卷积神经网络是一个无监督的特征学习网络

数据输入层 主要对原始图像数据进行预处理 ,基础操作包括取均值灰度归一化 ,还有一些数据增强的相关操作。

python 复制代码
# 这是一个典型的使用protobuf协议进行配置的网络输入层,它是Caffe的深度学习模型的配置文件
layer{
    name: "data"
    type: "ImageData"# 输入层的类型是ImageData,也就是原生的图像格式
    top: "data"
    top: "clc-label"
    # 该层有两个参数:image_data_param 和 transform_param 
    # 参数有一些属性,都是图像预处理参数
    image_data_param { # 这个参数有三个属性
        source: "all_shuffle_train.txt" # 表示输入训练文件路径
        batch size: 96 # 表示训练时输入数据的批处理大小
        shuffle: true # 表示是否采用随机操作
    }
    transform_param {
        mean_value: 104.008 # mean_value表示GRB的均值
        mean_value: 116.669 
        mean_value: 122.675
        crop_size: 48 # 表示输入训练图像尺寸
        mirror: true # 是数据增强操作,指代水平翻转
    }
    include: { phase: TRAIN}
}

2.卷积层

卷积层是网络的特征提取层。卷积神经网络一般包含多个卷积层,一个卷积层可以有多个不同的卷积核。

python 复制代码
# 这是一个典型的卷积网络层。
# 包含两类参数,即权重参数和偏置参数,其中配置了两个param属性,分别表示这两类参数的学习率
layer{
    name: "conv1"
    type: "Convolution"
    bottom: "data"
    top: "conv1"
    param {
        lr_mult:1
        decay_mult:1
    }
    param {
        lr_mult:2
        decay_mult: 0
    }
    convolution_param {
        num_output:12 # 输出特征层的通道数目
        pad:1 # 在卷积前进行边界填充像素的行列数
        kernel_size:3 # 卷积步长
        stride:2
        weight_filler{ # 卷积权重参数的初始化策略
            type:"xavier"
            std:0.01
        }
        bias_filler { # 这里配置的是偏置参数的初始化方法
            type: "constant"
            value:0.2
        }
    }
}

3.激活层

网络需要激活层进行特征的选择和抑制,早期的Sigmoid等函数使用较多,现在多实用形式更加简单的ReLU函数。

python 复制代码
# 这是一个激活层
# RELU激活层非常简单,没有需要学习的参数。(有的激活层有需要学习的参数)
layer{
    name: "relu1"
    type:"ReLU"
    bottom: "conv1"
    top: "conv1"
}

4.池化层

池化层用于降低特征平面的分辨率及抽象特征

池化用于压缩网络参数和数据,以降低过拟合。

如果输入为一幅图像,那么池化层最主要的作用就是在压缩图像的同时保持该图像特征的不变性

python 复制代码
# 这是一个池化层
# 池化层包含一个参数pooling_param
layer {
    name: "pool"
    type: "Pooling"
    bottom: "conv3"
    top: "pool"
    pooling_param { # 这个参数中有三个属性
        pool: MAX # 最大池化
        kernel_size: 3 # 池化操作的核的大小
        stride: 2 # 步长
    }
}

5.全连接层

全连接层通常在卷积神经网络结构的最后,它也有权重和偏置两个参数。

python 复制代码
# 这是一个全连接层,通常在卷积神经网络结构的最后,也有权重和偏置两个参数
# 其中配置了两个param属性,分别表示这两类参数的学习率
layer {
    name: "fc"
    type: "InnerProduct"
    bottom: "pool"
    top: "fc"
    param {
        lr_mult: 1
        decay_mult: 1
    }
    param {
        lr_mult: 2
        decay_mult: 1
    }
    inner_product_param {
        num_output: 2 # 输出特征维度,通常是分类任务的类别数目
        weight_filler{ # 权重参数的初始化方式
            type: "xavier"
        }
        bias_filler{ # 偏置参数的初始化方式
            type: "constant"
            value: 0
        }
    }
}

6.损失层

卷积神经网络的优化原理同一般的机器学习算法类似,需要定义损失目标函数,找到最小化损失函数的参数值 ,通常利用SGD(随机梯度下降 )等算法来调整权值

python 复制代码
# 这是一个softmax损失层,损失层的输入就是网络的输出和真实的标签
layer {
    name: "loss"
    type: "SoftmaxWithLoss"
    bottom: "fc"
    bottom: "clc-label"
    top: "loss"
}

7.精度层

损失目标函数可以反映网络性能的优劣,但不是最终需要的指标。

对于分类任务,最终需要的是分类精度;

对于回归任务,需要的是定位精度。

因此,一个卷积神经网络还需要接上网络精度层

python 复制代码
# 这是一个分类任务的精度层,它与损失层一样,输入是网络的输出和真实的标签
layer {
    bottom: "fc"
    bottom: "clc-label"
    top: "acc"
    name: "acc"
    type: "Accuracy"
}

上面定义的完整的网络结构如图1.20所示。
参考文献:

1.书名:《深度学习之图像识别 核心算法与实战案例 (全彩版)》

作者:言有三著

出版社:清华大学出版社

出版时间:2023年7月第一版(第一次印刷)

ISBN:978-7-302-63527-7

相关推荐
Zero_to_zero123417 分钟前
NVSpeech_170k 数据集音频提取处理
人工智能·音视频
聚集的流星1 小时前
大模型提示词工程调优
人工智能
东方佑1 小时前
从音频到Token:构建原神角色语音识别模型的完整实践
人工智能·音视频·语音识别
dlraba8022 小时前
基于 OpenCV 与 SIFT 算法的指纹识别系统实现:从匹配到可视化
人工智能·opencv·计算机视觉
shizidushu2 小时前
Hugging Face NLP课程学习记录 - 3. 微调一个预训练模型
人工智能·学习·自然语言处理·微调·huggingface
格林威2 小时前
机器视觉在半导体制造中有哪些检测应用
人工智能·数码相机·yolo·计算机视觉·视觉检测·制造·相机
月岛雫-2 小时前
“单标签/多标签” vs “二分类/多分类”
人工智能·分类·数据挖掘
似乎很简单2 小时前
卷积神经网络(CNN)
深度学习·神经网络·cnn
云卓SKYDROID2 小时前
无人机飞行速度模块技术要点概述
人工智能·无人机·飞行速度·高科技·云卓科技
币须赢3 小时前
英伟达Thor芯片套件9月发货 “物理AI”有哪些?
大数据·人工智能