首页 > 其他分享 >【深度学习基础模型】卷积神经网络(Convolutional Neural Networks, CNN)详细理解并附实现代码。

【深度学习基础模型】卷积神经网络(Convolutional Neural Networks, CNN)详细理解并附实现代码。

时间:2024-10-02 09:49:22浏览次数:10  
标签:Convolutional Neural 卷积 模型 test 图像 CNN model

【深度学习基础模型】卷积神经网络(Convolutional Neural Networks, CNN)详细理解并附实现代码。

【深度学习基础模型】卷积神经网络(Convolutional Neural Networks, CNN)详细理解并附实现代码。


文章目录


参考地址:https://www.asimovinstitute.org/neural-network-zoo/
论文地址:https://ieeexplore.ieee.org/document/726791

欢迎宝子们点赞、关注、收藏!欢迎宝子们批评指正!

1. 卷积神经网络(Convolutional Neural Networks, CNN)

1.1 概述

卷积神经网络(CNN)是专为处理数据的网格状拓扑结构(如图像)设计的深度学习模型。与全连接神经网络(FFNN)不同,CNN能够利用图像的局部特征,并通过卷积操作减少计算复杂度。CNN的核心在于它的卷积层和池化层,这使得它在处理图像、视频、音频等时表现出色。

CNN最初由Yann LeCun等人在20世纪90年代提出,并用于手写数字识别任务(如MNIST数据集)。随着计算能力的提升和数据集的丰富,CNN逐渐发展成为处理图像和时序数据的主流深度学习模型。

1.2 发展与应用

CNN自提出以来,已经在多个领域得到了广泛应用,包括但不限于:

  • 图像分类:如ImageNet挑战赛中的物体识别任务。
  • 目标检测:如RCNN、Faster-RCNN等用于检测图像中物体的模型。
  • 图像分割:如U-Net等模型用于医学图像中的区域划分。
  • 语音识别:通过对音频信号的卷积处理,CNN在语音识别中也有重要应用。
  • 自然语言处理:CNN在文本分类、情感分析等任务中也展现了良好表现。

随着深度学习技术的发展,CNN逐渐演变出多种变体,如深度卷积神经网络(DCNN),这些变体通过堆叠更多层次的卷积层和其他创新架构,在不同任务中获得了显著的性能提升。

1.3 优缺点

优点:

  • 局部感受野:CNN中的每个神经元只与局部区域的输入数据连接,这使得网络能够捕捉到图像或音频中的局部特征,尤其适用于处理高维数据(如图像)。
  • 参数共享:卷积核的参数在整个输入数据上共享,大大减少了模型的参数数量,从而减轻了计算负担。
  • 平移不变性:卷积操作在图像中滑动,因此CNN对输入图像的平移具有一定的鲁棒性。

缺点:

  • 需求大量数据:CNN通常需要大量的标记数据进行训练,特别是在复杂的图像或音频任务中。
  • 计算资源密集:尽管CNN的参数数量比全连接网络少,但在大规模数据集上的训练仍然需要强大的计算资源,尤其是深层网络。
  • 卷积核设计复杂:不同任务可能需要不同大小的卷积核,设计适合任务的卷积核和网络架构需要大量的实验和调参。

2. CNN的Python实现

这里我们使用Keras库来实现一个简单的CNN模型,用于对手写数字识别(MNIST数据集)的分类任务。

# 导入必要的库
import numpy as np
import tensorflow as tf
from tensorflow.keras import layers, models
from tensorflow.keras.datasets import mnist

# 加载MNIST数据集
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()

# 数据预处理:调整图像大小并归一化
train_images = train_images.reshape((60000, 28, 28, 1)).astype('float32') / 255
test_images = test_images.reshape((10000, 28, 28, 1)).astype('float32') / 255

# 将标签转换为one-hot编码
train_labels = tf.keras.utils.to_categorical(train_labels)
test_labels = tf.keras.utils.to_categorical(test_labels)

# 构建CNN模型
model = models.Sequential()

# 添加卷积层和池化层
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))

# 添加全连接层(Flatten和Dense层)
model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10, activation='softmax'))

# 编译模型
model.compile(optimizer='adam',
              loss='categorical_crossentropy',
              metrics=['accuracy'])

# 训练模型
model.fit(train_images, train_labels, epochs=5, batch_size=64)

# 评估模型
test_loss, test_acc = model.evaluate(test_images, test_labels)
print(f"Test accuracy: {test_acc}")

代码解释:

  • 1. 加载MNIST数据集:我们使用Keras内置的mnist.load_data()方法加载手写数字数据集,该数据集包含60000张训练图像和10000张测试图像,每张图像为28x28像素的灰度图。

  • 2. 数据预处理
    (1)我们将图像数据调整为28x28x1的格式(1表示灰度图通道),并将像素值归一化为[0,1]范围,以便更好地训练神经网络。
    (2)标签数据被转换为one-hot编码,使得输出层可以进行多类分类。

  • 3. 模型架构
    (1)第一层卷积层:添加一个32个卷积核的卷积层,卷积核大小为3x3,激活函数为ReLU。这层用于提取图像中的局部特征。
    (2)池化层:添加一个2x2的最大池化层,用于下采样图像,减少特征图的尺寸并保留重要信息。
    (3)第二和第三层卷积层:继续堆叠卷积层,进一步提取图像的高级特征。
    (4)全连接层:通过Flatten层将多维特征图展平成一维,并添加两个Dense层,第一个全连接层有64个神经元,第二个为输出层,有10个神经元对应10类分类。

  • 4. 模型编译:使用Adam优化器和分类交叉熵损失函数,评估指标为准确率。

  • 5. 模型训练:训练5个epoch,每个批次处理64张图像。

  • 6. 模型评估:通过测试集评估模型性能,打印测试集的准确率。

3. 总结

卷积神经网络(CNN)是当前处理图像、音频等网格状数据的最有效方法之一。其优势在于能够通过局部感受野和参数共享,自动提取输入数据的局部和全局特征,具有较强的泛化能力

CNN的设计使其在处理高维数据时表现优异,并且随着硬件计算能力的提升,深层CNN(DCNN)逐渐成为实际应用中的主流模型

然而,CNN的训练对大规模数据和计算资源有较高要求,同时网络架构的设计需要通过大量实验进行优化。因此,尽管CNN在视觉和音频领域表现出色,设计高效的卷积网络仍然是一个具有挑战性的任务。

标签:Convolutional,Neural,卷积,模型,test,图像,CNN,model
From: https://blog.csdn.net/gaoxiaoxiao1209/article/details/142566318

相关文章

  • 风速预测(五)基于Pytorch的EMD-CNN-LSTM模型
    往期精彩内容:时序预测:LSTM、ARIMA、Holt-Winters、SARIMA模型的分析与比较全是干货|数据集、学习资料、建模资源分享!拒绝信息泄露!VMD滚动分解+Informer-BiLSTM并行预测模型-CSDN博客风速预测(一)数据集介绍和预处理_风速数据在哪里下载-CSDN博客风速预测(二)基于Pytorch......
  • Pytorch-CNN轴承故障一维信号分类(二)
    往期精彩内容:Python-凯斯西储大学(CWRU)轴承数据解读与分类处理Pytorch-LSTM轴承故障一维信号分类(一)-CSDN博客三十多个开源数据集|故障诊断再也不用担心数据集了!Python轴承故障诊断(一)短时傅里叶变换STFT-CSDN博客Python轴承故障诊断(二)连续小波变换CWT-CSDN博客......
  • CNN模型实现CIFAR-10彩色图片识别
    关于深度实战社区我们是一个深度学习领域的独立工作室。团队成员有:中科大硕士、纽约大学硕士、浙江大学硕士、华东理工博士等,曾在腾讯、百度、德勤等担任算法工程师/产品经理。全网20多万+粉丝,拥有2篇国家级人工智能发明专利。社区特色:深度实战算法创新获取全部完整项目......
  • Java Deeplearning4j:构建和训练卷积神经网络(CNN)模型
    ......
  • VMD-BKA-CNN-BiLSTM四模型多变量时间序列光伏功率预测一键对比 Matlab代码
    基于VMD-BKA-CNN-BiLSTM、VMD-CNN-BiLSTM、VMD-BiLSTM、BiLSTM四模型多变量时间序列光伏功率预测一键对比(仅运行一个main即可)[原创未发表]Matlab代码赠送BKA原文献每个模型的预测结果和组合对比结果都有!运行步骤:1.先运行main1进行VMD分解2.在运行main2进行四模型一......
  • 吴恩达深度学习笔记:卷积神经网络(Foundations of Convolutional Neural Networks)2.5-2.
    目录第四门课卷积神经网络(ConvolutionalNeuralNetworks)第二周深度卷积网络:实例探究(Deepconvolutionalmodels:casestudies)2.5网络中的网络以及1×1卷积(NetworkinNetworkand1×1convolutions)2.6谷歌Inception网络简介(Inceptionnetworkmotivation)......
  • [机器视觉][轻量化网络]GhostFormer: Efficiently amalgamated CNNtransformer archit
    目的与成果:     本文旨在提出一个轻量化的模型,在减少模型参数量的同时,保持一定的精度,  实验表明,该模型在PascalVOC数据集上的计算成本不到YOLOv7的一半,仅损失约3%[email protected],在MSCOCO数据集上的损失为9.7%[email protected],与GhostNet相比提高了0.95。本文的主要思想: ......
  • CNN网络训练WISDM数据集:模型仿真及可视化分析
    卷积神经网络(CNN)因其强大的特征提取能力和深度学习架构而备受推崇,CNN在处理图像数据时展现出的卓越性能,使其成为解决各种视觉识别任务的首选工具。WISDM数据集是一个广泛用于运动估计研究的基准数据集,它包含了多个视频序列,每个序列都记录了摄像头在不同方向上移动时捕捉到的......
  • Python轴承故障诊断 (四)基于EMD-CNN的故障分类
    往期精彩内容:Python-凯斯西储大学(CWRU)轴承数据解读与分类处理三十多个开源数据集|故障诊断再也不用担心数据集了!Python轴承故障诊断(一)短时傅里叶变换STFT-CSDN博客Python轴承故障诊断(二)连续小波变换CWT-CSDN博客Python轴承故障诊断(三)经验模态分解EMD-CSDN博客......
  • [深度学习]卷积神经网络CNN
    1图像基础知识importnumpyasnpimportmatplotlib.pyplotasplt#图像数据#img=np.zeros((200,200,3))img=np.full((200,200,3),255)#可视化plt.imshow(img)plt.show()#图像读取img=plt.imread('img.jpg')plt.imshow(img)plt.show()2CNN概述卷积层conv+......