写点什么

深度学习:理解卷积神经网络(CNN)的原理和应用

作者:兴科Sinco
  • 2023-04-12
    贵州
  • 本文字数:1664 字

    阅读完需:约 5 分钟

深度学习:理解卷积神经网络(CNN)的原理和应用

卷积神经网络(Convolutional Neural Networks,CNN)是一种广泛应用于图像识别、语音识别、自然语言处理等领域的人工神经网络模型。本文将简要介绍 CNN 的原理和应用,并给出 Python 代码实现。

CNN 的原理

CNN 是一种前馈神经网络,具有一定层次结构,主要由卷积层、池化层、全连接层等组成。下面分别介绍这些层次的作用和原理。

1. 卷积层

卷积层是 CNN 的核心层次,其主要作用是对输入的二维图像进行卷积操作,提取图像的特征。卷积操作可以看作是一种滑动窗口操作,将一个小的窗口在输入的图像上滑动,并在每个位置上计算窗口内像素值与卷积核(也称为滤波器)的点积,得到一个新的特征图(也称为卷积特征)。不同的卷积核可以提取不同的特征,例如边缘、形状、颜色等,而相邻的特征图则对应着不同的卷积核。



上图展示了一个 3x3 的卷积核在输入的图像上进行卷积操作,得到一个新的特征图。需要注意的是,在实际计算中通常会对输入的图像和卷积核进行扩充(也称为填充),以保证卷积后特征图大小和输入图像大小相同,或者经过池化层后特征图大小缩小。

2. 池化层

池化层是 CNN 中的另一个重要层次,其主要作用是对输入的特征图进行下采样操作,降低特征图的维度,减少参数数量,防止过拟合。常见的池化方式包括最大池化和平均池化,它们分别选取特征图上每个小窗口中的最大值或平均值作为该小窗口的输出,从而得到一个新的池化特征。将输入的特征图下采样为原来的一半大小。池化操作通常会使特征图的尺寸减小,从而进一步降低计算量。

3. 全连接层

全连接层是 CNN 中的最后一层,其主要作用是将池化层输出的特征向量进行分类处理,将特征向量映射到各个类别的概率上。全连接层的节点与之前的各个节点相连,形成一个全连接网络,通过 softmax 函数将节点上的激活值转换为各个类别的概率。输出概率最高的类别即为最终的预测结果。其中每个节点都与输入的特征向量相连,通过权重矩阵和偏置向量计算激活值,进而通过 softmax 函数计算出各个类别的概率。

CNN 的应用

CNN 在图像识别方面的应用非常广泛,通过训练样本可以学习到不同的卷积核和特征,从而提高图像的分类准确度。下面给出一个简单的代码实现,使用 CNN 对手写数字 MNIST 数据集进行分类处理。


import tensorflow as tffrom tensorflow.keras import datasets, layers, models
# 加载MNIST数据集(train_images, train_labels), (test_images, test_labels) = datasets.mnist.load_data()
# 缩放像素值到0-1之间train_images, test_images = train_images / 255.0, test_images / 255.0
# 构建模型model = models.Sequential([ layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)), layers.MaxPooling2D((2, 2)), layers.Conv2D(64, (3, 3), activation='relu'), layers.MaxPooling2D((2, 2)), layers.Conv2D(64, (3, 3), activation='relu'), layers.Flatten(), layers.Dense(64, activation='relu'), layers.Dense(10)])
# 编译模型model.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), metrics=['accuracy'])
# 训练模型model.fit(train_images.reshape(-1, 28, 28, 1), train_labels, epochs=5, validation_data=(test_images.reshape(-1, 28, 28, 1), test_labels))
# 评估模型test_loss, test_acc = model.evaluate(test_images.reshape(-1, 28, 28, 1), test_labels, verbose=2)print(test_acc)
复制代码


上述代码中,我们首先使用datasets.mnist.load_data()加载 MNIST 数据集,然后使用卷积层、池化层和全连接层构建一个 CNN 模型,最后使用model.fit()方法训练模型,并使用model.evaluate()方法评估模型在测试集上的分类准确度。通过 5 个 epoch 的训练,测试集上的准确度可以达到 98%以上,证明 CNN 在图像分类方面的效果十分优秀。

结语

本文简要介绍了 CNN 的原理和应用,并给出了一个简单的 Python 代码实现。CNN 在图像分类、分割、检测等方面具有广泛应用前景,可以为我们带来更加智能的视觉体验。


发布于: 刚刚阅读数: 3
用户头像

兴科Sinco

关注

兴科Sinco 2022-02-27 加入

互联网前沿科技挖掘者!

评论

发布
暂无评论
深度学习:理解卷积神经网络(CNN)的原理和应用_人工智能_兴科Sinco_InfoQ写作社区