快速学会一个算法,卷积神经网络!!!

今天给大家分享一个强大的算法模型,卷积神经网络。 卷积神经网络(CNN)是一类专门用于处理具有网格结构数据(如图像)的深度学习模型,广泛应用于图像处理、计算机视觉等领域。 CNN 通过模仿生物视觉系统的结构,通过层级化的卷积和池化操作,自动从输入数据中提取特征并进行分类或回归。

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

卷积神经网络(CNN)是一类专门用于处理具有网格结构数据(如图像)的深度学习模型,广泛应用于图像处理、计算机视觉等领域。

CNN 通过模仿生物视觉系统的结构,通过层级化的卷积和池化操作,自动从输入数据中提取特征并进行分类或回归。CNN 的优势在于其自动特征提取能力,不需要人工设计特征,非常适合处理图像等高维数据。

快速学会一个算法,卷积神经网络!!!图片

卷积神经网络的基本结构

卷积神经网络主要由卷积层、池化层和全连接层组成。

卷积层

卷积层是 CNN 的核心层,它的核心思想是通过卷积操作提取图像的局部特征。

在卷积操作中,使用一组(多个)可训练的卷积核(也称为滤波器)在输入图像上滑动,并与图像的局部区域进行卷积计算。

快速学会一个算法,卷积神经网络!!!图片

每个卷积核提取图像的某一特征(如边缘、纹理、颜色等)。

卷积操作后的结果是一个特征图(Feature Map),表示了该特征在图像中的空间分布。

关键概念

  • 卷积核(Filter/Kerner)卷积核是一个小的矩阵,通常是 3x3 或 5x5。
  • 卷积核数量定义了卷积层的输出特征图的数量。每个卷积核产生一个特征图,多个卷积核可以提取多种不同的特征。
  • 步幅(Stride)步幅是卷积核在输入数据上滑动的步长。步幅决定了卷积操作的输出尺寸。步幅越大,输出特征图越小。
  • 填充(Padding)为了保持输入和输出特征图的尺寸一致,卷积操作通常会在输入数据的边缘添加额外的像素。这些额外的像素值通常设置为0。
  • 卷积运算卷积核与输入数据的每个局部区域进行逐元素相乘并求和的操作。例如,3x3的卷积核在图像上滑动时,会与图像的每个 3x3 区域进行卷积计算,生成对应位置的特征图。

快速学会一个算法,卷积神经网络!!!图片

池化层

池化层用于降低特征图的空间尺寸,减少计算量和参数数量,同时保留重要的特征信息

常用的池化操作有最大池化(Max Pooling)和平均池化(Average Pooling)。

  • 最大池化(Max Pooling),从特定区域中选取最大值。

快速学会一个算法,卷积神经网络!!!图片

  • 平均池化(Average Pooling),取特定区域的平均值。

快速学会一个算法,卷积神经网络!!!图片

全连接层

在卷积层和池化层提取了局部特征后,CNN 通常会通过一个或多个全连接层将这些特征映射到最终的输出。例如,图像分类问题中,全连接层的输出就是各个类别的预测值。

快速学会一个算法,卷积神经网络!!!图片

CNN的优势

  • 局部感知和权重共享卷积操作利用局部感知特性,能够在图像的不同区域提取相似的特征(如边缘、角点等)。卷积核在整个图像上共享权重,从而减少了参数的数量,避免了全连接网络中参数过多带来的问题。
  • 平移不变性由于卷积操作具有平移不变性,CNN 能够有效地识别图像中的目标,无论它们的位置如何。
  • 自动特征学习CNN 能够自动从原始数据中学习到特征,而无需人工设计特征。通过卷积层、池化层和全连接层的逐层组合,网络能够从简单到复杂地学习图像的层次化特征。

案例分享

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

首先,我们加载 MNIST 数据集。

复制
import tensorflow as tf
from tensorflow.keras import layers, models
import numpy as np
import matplotlib.pyplot as plt

# 加载 MNIST 数据集
(train_images, train_labels), (test_images, test_labels) = tf.keras.datasets.mnist.load_data()
train_images = train_images / 255.0
test_images = test_images / 255.0

# 重塑数据为 [batch_size, 28, 28, 1] 形式
train_images = np.expand_dims(train_images, axis=-1)
test_images = np.expand_dims(test_images, axis=-1)

接下来我们将创建一个简单的 CNN 模型。

复制
# 构建卷积神经网络 (CNN) 模型
model = models.Sequential()
# 第一层卷积层,32个3x3的卷积核,激活函数ReLU
model.add(layers.Conv2D(32, (3, 3), activatinotallow='relu', input_shape=(28, 28, 1)))
# 池化层,2x2的最大池化
model.add(layers.MaxPooling2D((2, 2)))
# 第二层卷积层,64个3x3的卷积核
model.add(layers.Conv2D(64, (3, 3), activatinotallow='relu'))
# 池化层,2x2的最大池化
model.add(layers.MaxPooling2D((2, 2)))
# 展平层,将卷积层的输出展平为一维
model.add(layers.Flatten())
# 全连接层,128个神经元
model.add(layers.Dense(128, activatinotallow='relu'))
# 输出层,10个神经元,使用Softmax激活函数进行分类
model.add(layers.Dense(10, activatinotallow='softmax'))

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

接下来,我们将使用训练数据来训练模型。

复制
history = model.fit(train_images, train_labels, epochs=5, batch_size=64, validation_data=(test_images, test_labels))

训练完成后,我们可以使用测试集评估模型的性能。

复制
test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2)
print(f"测试集准确率: {test_acc}")
predictions = model.predict(test_images)

# 打印预测结果和真实标签
for i in range(5):
    print(f"真实标签: {test_labels[i]}")
    print(f"预测标签: {np.argmax(predictions[i])}")
    plt.imshow(test_images[i].reshape(28, 28), cmap=plt.cm.binary)
    plt.show()

快速学会一个算法,卷积神经网络!!!图片

相关资讯

最大限度提高人工智能训练效率:选择合适的模型

译者 | 李睿审校 | 重楼快速准确地训练人工智能模型,对于建立对这些工作流工具的信任非常重要。 随着人工智能驱动的应用程序执行复杂任务的能力越来越强,数据科学家和机器学习工程师需要探索新方法。 要为特定用例开发最佳模型,利用合适的模型、数据集和部署可以简化人工智能开发过程并产生最佳结果。

基于CNN+PyTorch实现视觉检测分类

译者 | 朱先忠审校 | 重楼本文给出了一个使用CNN+PyTorch实现汽车电子行业视觉检测分类详尽的实战案例解析。 在本文中,我们开发了一个卷积神经网络(CNN),用于汽车电子行业的视觉检测分类任务。 在此过程中,我们深入研究了卷积层的概念和相关数学知识,并研究了CNN实际看到的内容以及图像的哪些部分导致它们做出决策。

​超快、超低能耗!北大团队提出基于卷积神经网络的全光计算

编辑/凯霞随着先进工程计算、经济数据分析和云计算的快速发展,对超高速和高能效计算的需求呈指数级增长。现有的冯诺依曼架构下的传统电子信号处理器难以同时实现高速和低能耗。使用光子作为信息载体是一种很有前景的选择。由于传统材料的三阶非线性光学较弱,在传统冯诺依曼架构下构建集成光子计算芯片一直是一个挑战。近日,由北京大学物理学院龚旗煌研究团队提出了一种基于卷积神经网络(CNN)实现超快超低能耗全光计算芯片方案的新策略,支持多计算任务的执行。这项工作为下一代全光计算系统指明了方向。该研究以「All-optical compu