文章详情

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

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-11-28 15:06

关注

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

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

CNN 通过局部连接和参数共享的方式,大幅减少了模型的计算量,能有效提取数据的局部和全局特征,被广泛应用于计算机视觉领域,如图像分类、物体检测、图像分割等。

图片图片

卷积神经网络的基本结构

卷积神经网络的主要包括卷积层、池化层和全连接层。每一层在 CNN 中承担不同的功能,共同作用以提取和处理数据特征。

卷积层

卷积层是 CNN 的核心层,它通过卷积操作提取输入数据的局部特征。

卷积操作使用卷积核(或滤波器),逐步在输入图像的局部区域上滑动,通过计算内积生成特征图。

图片图片

图片图片

图片图片

卷积层的作用

激活函数

每个卷积层后的输出会通过激活函数进行非线性变换,使网络能够学习复杂的非线性映射。

CNN 中常用的激活函数包括 ReLU、Leaky ReLU 和 Tanh 等。

ReLU 是卷积神经网络中最常用的激活函数,对正数直接输出,对负数输出零,有效缓解了梯度消失问题。

图片图片

池化层

池化层用于对卷积层的输出进行下采样,以减少特征图的尺寸,控制模型复杂度,避免过拟合。

池化层通常应用在卷积层之后,常见的池化操作包括最大池化和平均池化。

图片图片

全连接层

全连接层通常位于 CNN 的最后几层,所有的神经元都与上一层的所有输出相连,用于将提取的特征转换为最终的输出。

图片图片

卷积神经网络的工作流程

CNN 的输入通常是图像等二维或三维数据,它通过卷积层逐层提取特征,池化层下采样,最终全连接层输出分类或回归结果。

以下是一个典型的 CNN 工作流程

  1. 输入层,输入图像,例如尺寸为 32*32*3(高、宽、通道数)。
  2. 卷积层,使用多个卷积核提取特征,得到特征图。
  3. 激活函数,通过 ReLU 等激活函数引入非线性。
  4. 池化层,对特征图进行下采样,减少数据尺寸。
  5. 多层卷积和池化,通过叠加多个卷积层和池化层逐步提取更深层的特征。
  6. 全连接层,将提取的高层特征映射为输出,例如多类别的概率分布。

卷积神经网络的优势

案例分享

下面是一个使用卷积神经网络对经典的 MNIST 数据集进行手写数字识别的示例代码。

import tensorflow as tf
from tensorflow.keras.datasets import mnist
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
from tensorflow.keras.utils import to_categorical
import numpy as np
import matplotlib.pyplot as plt

# 加载 MNIST 数据集
(x_train, y_train), (x_test, y_test) = mnist.load_data()

x_train = x_train.reshape(-1, 28, 28, 1).astype('float32') / 255.0
x_test = x_test.reshape(-1, 28, 28, 1).astype('float32') / 255.0

y_train = to_categorical(y_train, 10)
y_test = to_categorical(y_test, 10)

# 构建卷积神经网络模型
model = Sequential()

# 第一层卷积层 + 激活层 + 池化层
model.add(Conv2D(32, kernel_size=(3, 3), activatinotallow='relu', input_shape=(28, 28, 1)))
model.add(MaxPooling2D(pool_size=(2, 2)))

# 第二层卷积层 + 激活层 + 池化层
model.add(Conv2D(64, kernel_size=(3, 3), activatinotallow='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

# 将卷积层的输出展平
model.add(Flatten())

# 全连接层 + 激活层
model.add(Dense(128, activatinotallow='relu'))

# 输出层(Softmax 生成 10 个类别的概率)
model.add(Dense(10, activatinotallow='softmax'))

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

# 训练模型
model.fit(x_train, y_train, batch_size=128, epochs=10, validation_split=0.2)

# 评估模型
test_loss, test_accuracy = model.evaluate(x_test, y_test)
print(f"Test Accuracy: {test_accuracy * 100:.2f}%")



# 随机选择一些测试图像的索引
num_images = 10
random_indices = np.random.choice(x_test.shape[0], num_images, replace=False)

# 获取这些图像和模型的预测结果
test_images = x_test[random_indices]
true_labels = np.argmax(y_test[random_indices], axis=1)
predicted_labels = np.argmax(model.predict(test_images), axis=1)

# 绘制图像及其预测结果
plt.figure(figsize=(12, 4))
for i in range(num_images):
    plt.subplot(2, 5, i + 1)
    plt.imshow(test_images[i].reshape(28, 28), cmap='gray')
    plt.title(f"True: {true_labels[i]}\nPred: {predicted_labels[i]}")
    plt.axis('off')
plt.show()

图片图片


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

免责声明:

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

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

软考中级精品资料免费领

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

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

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

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

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

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

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