文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

快速学习一个算法,CNN

2024-11-29 20:21

关注

今天给大家介绍一个强大的算法模型,CNN

卷积神经网络 (CNN) 是一类深度学习算法,主要用于处理和分析视觉数据。

它们彻底改变了计算机视觉领域,使图像识别、物体检测和各种其他应用取得了突破。

什么是卷积神经网络?

卷积神经网络 (CNN) 是一种人工神经网络,专门用于处理结构化网格数据(例如图像)。

与将输入视为平面像素阵列的传统神经网络不同,CNN 利用图像的空间结构来提取分层特征。这种能力使 CNN 在图像分类、对象检测和分割等任务中特别有效。

图片

关键组件

1.卷积层

卷积层是 CNN 的核心组件,用于提取输入数据的特征。

卷积层通过滤波器(卷积核)在输入数据上滑动,进行卷积操作,生成特征图(Feature Map)。每个卷积核负责捕捉图像的不同特征,如边缘、纹理等。

图片


图片

以下是使用 NumPy 的简单实现。

import numpy as np

def convolve(image, kernel, stride=1, padding=0):
    # Add padding to the input image
    image_padded = np.pad(image, [(padding, padding), (padding, padding)], mode='constant', constant_values=0)
    
    # Calculate output dimensions
    output_height = (image.shape[0] - kernel.shape[0] + 2 * padding) // stride + 1
    output_width = (image.shape[1] - kernel.shape[1] + 2 * padding) // stride + 1
    
    # Initialize output
    output = np.zeros((output_height, output_width))
    
    # Perform convolution
    for i in range(0, output_height, stride):
        for j in range(0, output_width, stride):
            output[i, j] = np.sum(image_padded[i:i+kernel.shape[0], j:j+kernel.shape[1]] * kernel)
    
    return output

2.池化层

池化层通常用于降低特征图的空间尺寸(高度和宽度),减少参数数量和计算复杂性,同时使特征检测更加鲁棒。

池化操作主要有两种类型:

图片

def max_pooling(image, size=2, stride=2):
    output_height = (image.shape[0] - size) // stride + 1
    output_width = (image.shape[1] - size) // stride + 1
    output = np.zeros((output_height, output_width))
    
    for i in range(0, output_height, stride):
        for j in range(0, output_width, stride):
            output[i, j] = np.max(image[i:i+size, j:j+size])
    
    return output

3.全连接层

经过几个卷积层和池化层之后,神经网络中的高级推理通过全连接层完成。

这些层将扁平化的特征图作为输入,并将其用于最终分类。

图片

CNN 的执行过程

让我们通过一个例子来了解 CNN 如何处理图像:

  1. 输入图像
    考虑 32x32x3 RGB 图像(高度、宽度、深度)。
  2. 卷积层
    对图像应用多个过滤器(例如 3x3),从而产生多个特征图。假设我们使用 10 个过滤器;输出将为 32x32x10。
  3. 池化层
    使用 2x2 最大池化,步长为 2,以减少空间维度。输出将为 16x16x10。
  4. 额外的卷积和池化层
    根据需要重复卷积、激活和池化操作。
  5. 全连接层
    将最后一个池化层的输出展平(例如,8x8x10 变为 640 维向量)并将其连接到密集层以进行分类。
  6. 输出层
    应用softmax函数获取类别的概率分布。

下面我们将使用 TensorFlow 构建一个简单的 CNN,用于 MNIST 数据集(手写数字数据集)的图像分类。

首先我们导入必要的库

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

然后加载和预处理数据

# Load the MNIST dataset
(train_images, train_labels), (test_images, test_labels) = tf.keras.datasets.mnist.load_data()

# Normalize the images
train_images = train_images.reshape((60000, 28, 28, 1)).astype('float32') / 255
test_images = test_images.reshape((10000, 28, 28, 1)).astype('float32') / 255

构建 CNN 模型

model = models.Sequential([
    layers.Conv2D(32, (3, 3), activatinotallow='relu', input_shape=(28, 28, 1)),
    layers.MaxPooling2D((2, 2)),
    layers.Conv2D(64, (3, 3), activatinotallow='relu'),
    layers.MaxPooling2D((2, 2)),
    layers.Conv2D(64, (3, 3), activatinotallow='relu'),
    layers.Flatten(),
    layers.Dense(64, activatinotallow='relu'),
    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, 
                    validation_data=(test_images, test_labels))

评估模型

test_loss, test_acc = model.evaluate(test_images, test_labels)
print(f"Test accuracy: {test_acc}")

plt.plot(history.history['accuracy'], label='accuracy')
plt.plot(history.history['val_accuracy'], label='val_accuracy')
plt.xlabel('Epoch')
plt.ylabel('Accuracy')
plt.legend(loc='lower right')
plt.show()

图片

来源:程序员学长内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯