终于把卷积神经网络算法搞懂了!!!

人工智能
卷积神经网络(CNN)是一种专门用于处理具有网格结构数据(如图像)的深度学习模型。CNN 的核心是通过卷积操作来提取图像中的局部特征,并通过池化操作降低数据的维度。

大家好,我是小寒

今天给大家分享一个强大的算法模型,卷积神经网络算法

卷积神经网络(CNN)是一种专门用于处理具有网格结构数据(如图像)的深度学习模型。

CNN 的核心是通过卷积操作来提取图像中的局部特征,并通过池化操作降低数据的维度。

卷积神经网络在很多计算机视觉任务中都表现出色,比如图像分类、目标检测和图像生成等。

图片图片

相关原理

卷积神经网络由若干层堆叠而成,通常包括卷积层池化层以及全连接层。

卷积层

卷积层是 CNN 的核心,它使用卷积核(或称过滤器)对输入进行卷积操作,以提取输入数据的局部特征。

图片图片

  • 卷积操作
    卷积层使用卷积核(或过滤器)在输入数据上进行局部滑动,计算加权和来生成特征图。
    这个过程使卷积层能够识别输入数据中的局部模式,如边缘、角点等。
  • 共享权重
    卷积核的参数是共享的,也就是说,在整个输入数据中,所有位置使用相同的卷积核。
    这种权重共享机制大大减少了模型的参数数量,避免过拟合,并提高了模型的训练效率。
  • 参数
    卷积层通常有三个重要参数:
  1. 卷积核大小(filter size):通常为 3x3 或 5x5,用来定义卷积核的尺寸。
  2. 步长(stride),表示卷积核在输入上移动的步幅。步长为 1 时,卷积核每次移动一个像素;步长为 2 时,卷积核每次移动两个像素。
  3. 填充(padding),为了控制输出的大小,填充会在输入数据的边缘补充零,从而保持输出尺寸不变。

下图显示了使用 3x3 的卷积核和步长为1 进行卷积操作。

图片图片

卷积层的作用

  • 提取局部特征
  • 通过共享权重减少参数数量

池化层

池化层用于对卷积层生成的特征图进行下采样,减少数据的空间维度和计算量,同时保留重要的特征。

常见的池化方法有最大池化和平均池化。

  • 最大池化(Max Pooling)
    最常用的池化方法。在局部区域内取最大值作为该区域的输出。
    例如,对于一个 2x2 的局部区域,最大池化会输出这四个值中的最大值。
  • 平均池化(Average Pooling)
    在局部区域内取平均值作为输出。

图片图片


全连接层

全连接层通常位于卷积神经网络的最后几层,用于将卷积和池化层提取的特征进行整合,并输出预测结果。

全连接层与传统的神经网络层类似,每一个节点与上一层的所有节点都有连接。通过这些连接,全连接层可以将前面提取的特征整合起来,并通过权重和偏置项计算出最终的输出。

扁平化

扁平化将二维或三维特征图转换为一维向量,从而可以将卷积层和池化层连接到全连接层。

图片图片


全连接层

全连接层通过处理卷积层和池化层提取的特征来执行最终的分类或回归任务。

图片图片


案例分享

下面是一个使用卷积神经网络(CNN)进行手写数字识别的示例代码。

import tensorflow as tf
from tensorflow.keras import layers, models
from tensorflow.keras.datasets import mnist
import matplotlib.pyplot as plt

# 加载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
train_labels = tf.keras.utils.to_categorical(train_labels)
test_labels = tf.keras.utils.to_categorical(test_labels)

# 构建CNN模型
model = models.Sequential()
# 第一个卷积层,32 个滤波器,3x3 滤波器尺寸,ReLU激活函数
model.add(layers.Conv2D(32, (3, 3), activatinotallow='relu', input_shape=(28, 28, 1)))
# 第二个卷积层,64 个滤波器
model.add(layers.Conv2D(64, (3, 3), activatinotallow='relu'))
# 池化层,2x2 池化
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Dropout(0.25))
# 将多维特征图展平
model.add(layers.Flatten())

# 全连接层,128个神经元
model.add(layers.Dense(128, activatinotallow='relu'))
model.add(layers.Dropout(0.5))
model.add(layers.Dense(10, activatinotallow='softmax'))


model.compile(optimizer='adam',
              loss='categorical_crossentropy',
              metrics=['accuracy'])

history = model.fit(train_images, train_labels, epochs=5, batch_size=64, validation_split=0.1)
test_loss, test_acc = model.evaluate(test_images, test_labels)
print(f"Test accuracy: {test_acc}")

# 绘制训练过程中的准确率和损失
plt.figure(figsize=(12, 4))
plt.subplot(1, 2, 1)
plt.plot(history.history['accuracy'], label='Training Accuracy')
plt.plot(history.history['val_accuracy'], label='Validation Accuracy')
plt.legend()
plt.title('Training and Validation Accuracy')

plt.subplot(1, 2, 2)
plt.plot(history.history['loss'], label='Training Loss')
plt.plot(history.history['val_loss'], label='Validation Loss')
plt.legend()
plt.title('Training and Validation Loss')
plt.show()

图片图片

责任编辑:武晓燕 来源: 程序员学长
相关推荐

2024-10-05 23:00:35

2024-10-28 00:38:10

2024-11-15 13:20:02

2024-09-12 08:28:32

2024-10-17 13:05:35

神经网络算法机器学习深度学习

2024-07-24 08:04:24

神经网络激活函数

2024-11-07 08:26:31

神经网络激活函数信号

2024-10-16 07:58:48

2024-09-26 07:39:46

2024-09-23 09:12:20

2024-11-14 00:16:46

Seq2Seq算法RNN

2021-06-22 09:46:52

神经网络人工智能深度学习

2024-07-17 09:32:19

2024-08-01 08:41:08

2024-10-14 14:02:17

机器学习评估指标人工智能

2024-11-05 12:56:06

机器学习函数MSE

2024-09-18 16:42:58

机器学习评估指标模型

2024-08-23 09:06:35

机器学习混淆矩阵预测

2022-06-16 10:29:33

神经网络图像分类算法

2024-10-28 00:00:10

机器学习模型程度
点赞
收藏

51CTO技术栈公众号