深度卷积神经网络学习(CNN)

article/2025/8/22 13:23:02

什么是卷积神经网络

CNN:神经网络在前面的学习中我们已经了解过很多了,其本质就是多层感知机,卷积神经网络其实也一样,但是我们可以将其看成多层感知机的变种。它成功的原因在于其所采用的局部连接权值共享的方式:

  • 一方面减少了权值的数量使得网络易于优化,算力大大提高
  • 另一方面降低了模型的复杂度,也就是减小了过拟合的风险

该优点在网络的输入是图像时表现的更为明显,使得图像可以直接作为网络的输入,避免了传统识别算法中复杂的特征提取和数据重建的过程,在二维图像的处理过程中有很大的优势。

2.模型构建:

CNN:首先了解卷积神经网络的四个组件:

  • 卷积层(Convolution)
  • 非线性映射(ReLu),即非线性激活函数
model.add(Conv2D(32,(3,3),activation='relu',padding='valid',input_shape=((28,28,1))))
  • 池化层(Pooling)
model.add(MaxPool2D(2))
  • 分类层(FC)
model.add(Flatten())

接下来我主要介绍卷积层和池化层

  • 首先介绍卷积层,卷积层主要有以下三种特性:
    • 参数共享
    • 自动提取特征
    • 平移不变性

卷积操作其实并不算复杂,但是他有很多种卷积方式,我们在进行卷积之后输出的图像也会和我们选择的卷积核有关,能够让维度下降、不变、甚至上升。

  • 接着介绍池化层,池化层一般分为以下两种池化:
    • 一般池化(最常用的池化,池化的过程中,不会将前面操作过的像素再用于池化操作)
    • 重叠池化,和一般池化相反,一般池化的步长为1时,使用过的像素就会重叠,即重复使用
    • 池化层的同样拥有三种特性:
      • 池化无参数
      • 具有降维作用
      • 缩放不变

一般的池化操作我们会使用最大池化,即在选定的部分像素中,我们选择其中最大的一个像素值来作为这一部分的像素的代表,这就使得整体的数据降维,我们生活中常见的马赛克,就是池化操作产生的。

常见的卷积神经网络模型

  1. LetNet-5模型
    在这里插入图片描述
    Conv-Pool-Conv-Pool-FC-FC-Softmax

模型相对简单,层数也较少

  1. AlexNet模型
    在这里插入图片描述
    Conv-Pool-Conv-Pool-Conv-Conv-Conv-Pool-FC-FC-Softmax

  2. VGG-16模型
    在这里插入图片描述
    Conv-Conv-Pool-Conv-Conv-Pool-Conv-Conv-Conv-Pool-Conv-Conv-Conv-Pool-FC-FC-FC-Softmax

  3. GoogleNet模型(Inception V1)

在这里插入图片描述
是一种既有深度又有宽度的模型,具有以下功能:

  • 实现跨通道的交互和信息整合
  • 可以把不同特征图组合
  • 全连接可以看作1X1卷积操作
  1. ResNet模型
    在这里插入图片描述
    该模型使用ReLu函数用于激活,改善了梯度消失的问题,使信息前后向传播更加顺畅
  • 提升了参数利用率
  • 底层的特征也进行了充分的传递,泛化性较好
  • Loss对底层参数有一定的影响,能较容易地进行训练

3.实验过程:

  1. 手写数字集测试
  • 首先我们对比一下,图片在经过卷积或者池化操作之后,跟原图会有什么区别
# TensorFlow 卷积池化
import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np
(x_train,y_train),(x_test,y_test) = tf.keras.datasets.mnist.load_data()
x_train = x_train.reshape((-1,28,28,1))/255.0
x_test = x_test.reshape((-1,28,28,1))/255.0
filter = tf.constant([[-1,-1,-1],[-1,9,1],[-1,-1,-1]],dtype='float32')
filter = tf.reshape(filter,(3,3,1,1))
img = tf.constant(x_train[0:1]/255.0,dtype='float32')
conv_img = tf.nn.conv2d(img,filter,strides=[1,2,2,1],padding='SAME')
pool_img = tf.nn.max_pool(img,[1,2,2,1],[1,2,2,1],padding="VALID")
# window_size,stride
print(conv_img.shape)
plt.subplot(131)
plt.imshow(tf.squeeze(img))
plt.subplot(132)
plt.imshow(tf.squeeze(conv_img))
plt.subplot(133)
plt.imshow(tf.squeeze(pool_img))
plt.show()

在这里插入图片描述
由于我们采用的卷积核的特性,将一些较大的值都滤掉了,反观池化,虽然较大的值都保留了,但是同样损失了很多细节。

  • 接下里,我们构建一个经典LeNet-5的卷积神经网络,进行手写数字的识别
import tensorflow as tf
from tensorflow.keras.layers import *
from tensorflow.keras.models import Sequential
(x_train,y_train),(x_test,y_test) = tf.keras.datasets.mnist.load_data()
#tf.keras.datasets.mnist.load_data()
#tf.keras.datasets.fashion_mnist.load_data()
x_train = x_train.reshape((-1,28,28,1))/255.0
x_test = x_test.reshape((-1,28,28,1))/255.0
y_train = tf.keras.utils.to_categorical(y_train,10)
y_test = tf.keras.utils.to_categorical(y_test,10)
model = Sequential()
model.add(Conv2D(32,(3,3),activation='relu',padding='valid',input_shape=((28,28,1))))
model.add(MaxPool2D(2))
model.add(Conv2D(32,(3,3),activation='relu',padding='same'))
model.add(Flatten()) #FC,将二维图片展平成一维向量
model.add(Dense(128,activation='relu'))
model.add(Dense(10,activation='softmax'))
model.compile(optimizer=tf.keras.optimizers.Adam(),
loss=tf.keras.losses.categorical_crossentropy,metrics=['accuracy'])
model.fit(x_train,y_train,batch_size=128,epochs=20)
print(model.evaluate(x_test,y_test))

从上述代码中,我们可以发现,这个卷积神经网络中,我们使用了两个卷积层、两个最大池化层、两个全连接层

  • 我们得到的精度如下:
    在这里插入图片描述
  1. Alex-net模型:(主要为8层)
    Conv-pool-Conv-pool-Conv-Conv-Conv-pool-FC-FC-Softmax分类输出
  • 初始框架优化效果:
    在这里插入图片描述
  • 将卷积核的数目核batch_size扩大一倍后:
    在这里插入图片描述
  • 感觉精度不高的原因是模型太简单,我们在原模型的基础上增加一层卷积
    在这里插入图片描述
    效果不错,再也不是乌龟爬式的增长了
  • 再加两层卷积之后再池化
    在这里插入图片描述
  • 重复上述操作
    在这里插入图片描述
    精度的提升很小,说明靠这种方法来提升精度已经达到了极限值
  1. VGG16模型:(卷积核3x3;池化核2x2,步长为2,即不重叠池化)
    在这里插入图片描述
    从上图我们可以看到,该模型由最大池化层分隔,总共分隔成了6块,其中五块为卷积层,一块为全连接层。且每一次的卷积都使得输入和输出的图像大小不变,只有在池化时变为原来的一半,最后由三层全连接层输出
  • 略微增大卷积核个数,得到精度如下:
    在这里插入图片描述
  • VGG16模型的层数实在是太多了,以至于我觉得该模型应该是属于过拟合的状态,我决定将其简化,原本的VGG16模型有5个模块,删去最后一个,剩下四个模块。
    在这里插入图片描述
    稍微提升了一些
  1. InceptionNet模型:(更多的支路,更宽的神经网络)
  • 该模型初次的精度如下:
    在这里插入图片描述

  • 我们知道,卷积核可以提取突破的特征,初步设想,给定较多的卷积核,便能提取更多特征,那么最后的精度应该会高。所以将原来的卷积核个数翻倍,得到的结果如下:
    在这里插入图片描述
    看来这招在这里并不合适

  • 既然增加卷积核的个数行不通,索性让神经网络变得更深一些
    在这里插入图片描述
    精度下降了,看来单纯地深化神经网络,也不一定就能达到最好的效果,太复杂的模型很有可能会过拟合,导致精度下降。

  • 删去一层深度之后,效果似乎有所好转
    在这里插入图片描述

  • 增加一条支路,让其模型变成5条支路,3层深度
    在这里插入图片描述

  1. ResNet模型
  • 初始精度大概是0.126左右,稍微添加了一层卷积,结果精度直接降低一半
    在这里插入图片描述
  • 删去两层卷积
    在这里插入图片描述

总结

总的来说对几个常见的卷积神经网络结构有了一定的了解,无非就是卷积、池化、归一化、全连接的各种组合,在调试优化模型的过程中我也进行了很多尝试,有了一定的收获。调参是门技术活,而我只会没脑子的瞎调


http://chatgpt.dhexx.cn/article/HMwhfM5k.shtml

相关文章

深度卷积神经网络及各种改进

文章目录 1、残差网络2、不同大小卷积核并行卷积3、利用(1,x),(x,1)卷积代替(x,x)卷积4、采用瓶颈(Bottleneck)结构5、深度可分离卷积6、改进版深度可分离卷积残差网络7、倒转残差(Inverted residuals)结构8、并行空洞卷积 1、残差网络 这个网络主要源自于Resnet网络&#xff…

深度学习-卷积神经网络(python3代码实现)

卷积神经网络(上) 作者:Bossof537 写这个也不容易,小哥哥小姐姐转载请注明出处吧,感谢! 1、简介 卷积神经网络与常规的神经网络十分相似,它们都由可以对权重和偏置进行学习的神经元构成。每个神…

深度神经网络与卷积神经网络的区别

前馈神经网络、BP神经网络、卷积神经网络的区别与联系 一、计算方法不同1、前馈神经网络:一种最简单的神经网络,各神经元分层排列。每个神经元只与前一层的神经元相连。接收前一层的输出,并输出给下一层.各层间没有反馈。 2、BP…

深度卷积神经网络是什么,卷积神经网络结构设计

卷积神经网络算法是什么? 一维构筑、二维构筑、全卷积构筑。 卷积神经网络(ConvolutionalNeuralNetworks,CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(FeedforwardNeuralNetworks),是深度学习&a…

深度学习,卷积神经网络

卷积神经网络 1.卷积神经网络应用领域 CV领域发展 CV领域是计算机视觉(Computer Vision)领域的简称。 计算机视觉是指利用计算机模拟人类视觉系统的科学,让计算机具有类似于人类在观察外界的视觉、图像的能力,包括图像处理、图…

AlexNet-深度卷积神经网络(CNN卷积神经网络)

文章目录 深度卷积神经网络(AlexNet)AlexNet模型说明激活函数选定模型定义读取数据集训练AlexNet小结 深度卷积神经网络(AlexNet) 2012年,AlexNet横空出世。它首次证明了学习到的特征可以超越出手工设计的特征。 它一…

深度学习中的卷积神经网络

博主简介 博主是一名大二学生,主攻人工智能研究。感谢让我们在CSDN相遇,博主致力于在这里分享关于人工智能,c,Python,爬虫等方面知识的分享。 如果有需要的小伙伴可以关注博主,博主会继续更新的&#xff0c…

深度学习:卷积神经网络(详解版)

文章目录 一、全局连接VS局部连接1.1 局部神经元连接的优势1.2 全连接网络的权重参数量1.3 神经网络的局部特征提取(卷积) 二:感受野2.1 生物上的定义2.2 深度学习的定义2.3 感受野的作用2.4 感受野的计算公式2.5 感受野对网络的影响 三&…

深度卷积神经网络基本介绍

关于深度卷积神经网络的前世今生,就不在此处进行过多的介绍。在此,主要对网络的各个组成部分进行简要介绍: 图1 基本的深度卷积网络结构 通过图1可知深度卷积神经网络主要是由输入层、卷积层、激活函数、池化层、全连接层和输出层组成。以下将…

深度卷积神经网络(CNN)

CNN简述 卷积神经网络(Convolutional Neural Network,CNN),它是属于前馈神经网络的一种,其特点是每层的神经元节点只响应前一层局部区域范围内的神经元(全连接网络中每个神经元节点则是响应前一层的全部节…

深度学习|卷积神经网络

一、卷积神经网络简介 卷积神经网络(Convolutional Neural Network,CNN)是一种深度学习神经网络结构,主要用于图像识别、计算机视觉等领域。该结构在处理图像等高维数据时表现出色,因为它具有共享权重和局部感知的特点…

什么是深度卷积神经网络,卷积神经网络怎么学

卷积神经网络通俗理解 。 卷积神经网络(ConvolutionalNeuralNetworks,CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(FeedforwardNeuralNetworks),是深度学习(deeplearning)的代表算法…

深度学习—卷积神经网络(Convolutional Neural Networks)

卷积神经网络(Convolutional Neural Networks) 卷积神经网络(convolutional neural network, CNN),是一种专门用来处理具有类似网格结构的数据的神经网络。例如时间序列数据(可以认为是在时间轴上有规律地…

深度卷积图神经网络(Deep Convolutional Graph Neural Network,DCGNN)的基本概念与应用

目录 一、引言 1.1 神经网络的发展历程 1.2 图神经网络的出现 二、深度卷积图神经网络的基本概念 2.1 图的表示 2.2 图卷积神经网络 2.3 深度卷积图神经网络 三、深度卷积图神经网络的应用 3.1 图像分类 3.2 图像分割 3.3 图像生成 四、深度卷积图神经网络的优缺点 …

超级详细的安装虚拟机教程--配图--步骤拆分

1、首先我们需要下载两个文件,一个虚拟机文件,一个程序光盘文件。然后我们安装虚拟机, 类似于这两个文件: 2、虚拟机安装好之后回来到这个页面:点击创建新的虚拟机 3、选择界面,建议选择自定义:…

VMware vSphere Client 安装虚拟机

一、VMware vSphere Client安装虚拟机步骤。 1、启动虚拟机安装,如下图所示。 2、选择所需要安装的虚拟机类型,例如Centos7 、ubuntu、debian等。 3、选择磁盘、内存、CPU大小。 4、启动虚拟机。 5、选择操作系统镜像进行安装。 二、操作系统安装。 1、…

Mac m2芯片安装虚拟机win11

写在前面,这两天安装虚拟机和Windows系统搞的我头皮发麻,遇到了很多不能解决的问题,主要就是m1/m2芯片好多软件都不兼容脑阔疼,失败的路程就不展示了,我们只展示成功过程中的修问题 一开始使用的virtual box虚拟机&am…

VirtualBox安装虚拟机全过程

使用Virtual Box安装虚拟机,虚拟机操作系统使用CentOS7进行安装,安装完成后解决网络设置的问题。 一、虚拟机新建过程 1、点击新建。 2、设置内存大小,点击下一步。 3、选择虚拟硬盘,点击创建。 4、选择创建虚拟硬盘,点…

crossover2023最新苹果笔记本mac系统如何安装虚拟机?

mac系统怎么装虚拟机?如果只在mac上安装虚拟机软件是无法正常运行Windows系统的,还需要将Windows镜像文件导入由虚拟机软件搭建的Windows系统运行环境。mac虚拟机性能怎么样?mac虚拟机的性能由电脑本身的存储空间,以及虚拟机软件&…

安装虚拟机步骤 详细

虚拟机安装步骤 打开VMware Workstation,点击创建新的虚拟机。 点击自定义(高级)(C),下一步。 选择虚拟机硬件兼容性 Workstation 15.x,下一步。 选择稍后安装操作系统,下一步。 …