卷积神经网络的基本结构

卷积神经网络的基本结构

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

典型的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.数据输入层

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

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

# 这是一个典型的使用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.卷积层

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

# 这是一个典型的卷积网络层。
# 包含两类参数,即权重参数和偏置参数,其中配置了两个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函数。

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

4.池化层

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

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

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

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

5.全连接层

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

# 这是一个全连接层,通常在卷积神经网络结构的最后,也有权重和偏置两个参数
# 其中配置了两个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(随机梯度下降)等算法来调整权值

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

7.精度层

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

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

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

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

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

上面定义的完整的网络结构如图1.20所示。

参考文献:

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

作者:言有三著

出版社:清华大学出版社

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

ISBN:978-7-302-63527-7

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/389614.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

社区商铺开什么店最好?从商业计划书到实际运营

在社区商铺开店,选择适合的业态是成功的关键。作为一名开店 5 年的资深创业者,我想分享一些关于社区店的干货和见解。 这篇文章,我用我的项目给大家举例子! 鲜奶吧作为一种新兴的业态,以提供新鲜、健康的乳制品为主&…

vue3 之 倒计时函数封装

理解需求 编写一个函数useCountDown可以把秒数格式化为倒计时的显示xx分钟xx秒 1️⃣formatTime为显示的倒计时时间 2️⃣start是倒计时启动函数,调用时可以设置初始值并且开始倒计时 实现思路分析 安装插件 dayjs npm i dayjs倒计时逻辑函数封装 // 封装倒计时…

C++类和对象-多态->多态的基本语法、多态的原理剖析、纯虚函数和抽象类、虚析构和纯虚析构

#include<iostream> using namespace std; //多态 //动物类 class Animal { public: //Speak函数就是虚函数 //函数前面加上virtual关键字&#xff0c;变成虚函数&#xff0c;那么编译器在编译的时候就不能确定函数调用了。 virtual void speak() { …

流量主小程序/公众号h5开源代码 源码分享

小程序开源代码合集 1、网课搜题小程序源码/小猿题库多接口微信小程序源码自带流量主 搭建教程 1、微信公众平台注册自己的小程序 2、下载微信开发者工具和小程序的源码 3、上传代码到自己的小程序 界面截图&#xff1a; 开源项目地址&#xff1a;https://ms3.ishenglu.com…

python 人脸检测器

import cv2# 加载人脸检测器 关键文件 haarcascade_frontalface_default.xml face_cascade cv2.CascadeClassifier(haarcascade_frontalface_default.xml)# 读取图像 分析图片 ren4.png image cv2.imread(ren4.png) gray cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 进行人脸…

php基础学习之函数

基本概念 是一种语法结构&#xff0c;将实现某一个功能的代码块封装到一个结构中&#xff0c;从而实现代码的重复利用 php函数的定义语法 &#xff08;与C/Java很类似&#xff0c;区别在于没有数据类型&#xff0c;因为php是弱类型语言&#xff09; function 函数名(参数){ //…

波奇学Linux:文件系统打开文件

从文件系统来看打开文件 计算机系统和磁盘交互的大小是4kb 物理内存的4kb&#xff0c;磁盘的4kb文件叫做页帧 磁盘数据块的以4kb为单位。 减少IO的次数&#xff0c;减少访问外设的次数--硬件 基于局部性的原理&#xff0c;预加载机制--软件 操作系统管理内存 操作系统对…

leetcode hot 100最小花费爬楼梯

本题和之前的爬楼梯类似&#xff0c;但是需要考虑到花费的问题&#xff01;**注意&#xff0c;只有在爬的时候&#xff0c;才花费体力&#xff01;**那么&#xff0c;我们还是按照动态规划的五部曲来思考。 首先我们要确定dp数组的含义&#xff0c;那么就是我们爬到第i层所花费…

[嵌入式AI从0开始到入土]14_orangepi_aipro小修补含yolov7多线程案例

[嵌入式AI从0开始到入土]嵌入式AI系列教程 注&#xff1a;等我摸完鱼再把链接补上 可以关注我的B站号工具人呵呵的个人空间&#xff0c;后期会考虑出视频教程&#xff0c;务必催更&#xff0c;以防我变身鸽王。 第1期 昇腾Altas 200 DK上手 第2期 下载昇腾案例并运行 第3期 官…

DDR简单了解

DDR全称为 double data rate Synchronous Dynamic Random Access Memory 既DDR SDRAM。 顾名思义需要依次了解这些名词DRAM, SDRAM, DDR, DDR2, DDR3, DDR4。因为这些名词代表DRAM发展的不同阶段&#xff0c;它们是内存的同一条技术路线&#xff0c;核心都是使用一个晶体管和一…

debug - 打补丁 - 浮点数加法

文章目录 debug - 打补丁 - 浮点数加法概述笔记demo用CE查看汇编(x64debug)main()update_info()快捷键 - CE中查看代码时的导航打补丁的时机 - 浮点数加法补丁代码补丁效果浮点数寄存器组的保存END debug - 打补丁 - 浮点数加法 概述 在cm中, UI上显示的数值仅仅用来显示, 改…

开启AI新篇章:全新GPT-4订阅方案! ChatGPTPlus(GPT4)支付渠道! 付费充值!

1. GPT-4订阅价格 以每月仅20美元的价格&#xff0c;引领您进入GPT-4的强大数字体验世界。作为前沿的语言模型&#xff0c;GPT-4为您的工作和创造带来了无与伦比的生产力提升&#xff0c;彻底改变您的工作和创造方式。 GPT-4不仅具有卓越的自然语言处理能力&#xff0c;还引入…

kafka如何保证消息不丢?

概述 我们知道Kafka架构如下&#xff0c;主要由 Producer、Broker、Consumer 三部分组成。一条消息从生产到消费完成这个过程&#xff0c;可以划分三个阶段&#xff0c;生产阶段、存储阶段、消费阶段。 产阶段: 在这个阶段&#xff0c;从消息在 Producer 创建出来&#xff0c;…

【汇总】解决IndexedDB报Failed to execute ‘transaction‘ on ‘IDBDatabase‘

问题发现 再学习HTML5中&#xff0c;有介绍到 Web 存储&#xff0c;当代码编写完成后&#xff0c;运行报错 Failed to execute ‘transaction’ on ‘IDBDatabase’: One of the specified object stores was not found. 示例代码如下&#xff1a; <!DOCTYPE html> <…

【后端高频面试题--Nginx篇】

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;后端高频面试题 &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; 后端高频面试题--Nginx篇 往期精彩内容什么是Nginx&#xff1f;为什么要用Nginx&#xff1f;为…

HC05蓝牙模块

简介 HC-05 蓝牙串口通信模块&#xff0c;是基于 Bluetooth Specification V2.0 带 EDR 蓝牙协议的 数传模块。无线工作频段为 2.4GHz ISM&#xff0c;调制方式是 GFSK。模块最大发射功率为 4dBm&#xff0c;接收灵敏度-85dBm&#xff0c;板载 PCB 天线&#xff0c;可以实现 1…

HTTP协议-响应报文详解(Respond)

目录 前言&#xff1a; 1.Respond报文 1.1报文格式 1.2格式图解 2.状态行&#xff08;首行&#xff09; 2.1状态码/状态码解释 &#xff08;1&#xff09;200 OK &#xff08;2&#xff09;404 Not Found &#xff08;3&#xff09;403 Forbidden &#xff08;4&#…

【机器学习笔记】 6 机器学习库Scikit-learn

Scikit-learn概述 Scikit-learn是基于NumPy、 SciPy和 Matplotlib的开源Python机器学习包,它封装了一系列数据预处理、机器学习算法、模型选择等工具,是数据分析师首选的机器学习工具包。 自2007年发布以来&#xff0c;scikit-learn已经成为Python重要的机器学习库了&#xff…

C++中类的6个默认成员函数 【拷贝构造函数】

文章目录 拷贝构造函数的使用拷贝构造对于自定义类型【浅拷贝】深拷贝拷贝构造函数典型调用场景 拷贝构造函数的使用 在前几章学习对象的时候&#xff0c;我们有的时候需要一个与已存在对象一某一样的新对象 那在创建对象时&#xff0c;可否创建一个与已存在对象一某一样的新对…

数值类型的运算方式总结

提纲1&#xff1a;常见的位运算使用场景 提纲2&#xff1a;整数类型运算时的类型溢出问题&#xff0c;产生原因以及解决办法 提纲3&#xff1a;浮点类型运算时的精度丢失问题&#xff0c;产生原因以及解决办法 数值类型&#xff08;6种&#xff09;分为&#xff1a; 整型&…