当前位置: 首页 > article >正文

【机器学习】-深度学习模型

深度学习模型介绍

深度学习是机器学习的一个分支,它通过构建多层的神经网络模型来模拟人脑的工作机制。深度学习模型具有强大的特征提取和表示能力,在图像识别、语音识别、自然语言处理等领域取得了显著的成果。

主要组成部分

  • 输入层:接收原始数据,如图像像素值或文本词向量。
  • 隐藏层:由多个神经元组成,负责对输入数据进行复杂的非线性变换,每一层都可以看作是对前一层输出的一种抽象表示。
  • 输出层:给出最终预测结果,例如分类任务中的类别概率分布。

常见类型

  1. 卷积神经网络(CNN)

    • 适用于处理具有网格结构的数据,如二维图像。
    • 特点:局部连接、权值共享、池化操作等。
  2. 循环神经网络(RNN)及其变体LSTM/GRU

    • 适合处理序列数据,能够捕捉时间依赖关系。
    • 解决长短期记忆问题,避免梯度消失。
  3. 生成对抗网络(GAN)

    • 包含生成器与判别器两个部分,相互对抗训练。
    • 应用于图像生成、风格迁移等创意任务。
  4. Transformer

    • 引入自注意力机制,有效处理长距离依赖。
    • 在自然语言处理领域表现优异,如BERT、GPT系列模型。

实例:使用TensorFlow实现简单的MNIST手写数字识别

import tensorflow as tf
from tensorflow.keras import layers, models

# 加载MNIST数据集
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0  # 归一化

# 构建模型
model = models.Sequential([
    layers.Flatten(input_shape=(28, 28)),  # 将28x28的图像展平成784维向量
    layers.Dense(128, activation='relu'),  # 全连接层
    layers.Dropout(0.2),                   # Dropout层防止过拟合
    layers.Dense(10)                       # 输出层,对应10个类别
])

# 编译模型
loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)
model.compile(optimizer='adam', loss=loss_fn, metrics=['accuracy'])

# 训练模型
model.fit(x_train, y_train, epochs=5)

# 评估模型
model.evaluate(x_test, y_test, verbose=2)

实例详细解释

我们将逐步解析上述代码

1. 导入必要的库
import tensorflow as tf
from tensorflow.keras import layers, models
  • tensorflow:深度学习框架,提供了构建、训练和部署机器学习模型所需的工具。
  • layersmodels:来自Keras API,用于定义神经网络的层和模型结构。
2. 加载MNIST数据集
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0  # 归一化
  • mnist.load_data():加载MNIST手写数字数据集,返回训练集和测试集。每个样本是一个28x28像素的灰度图像,标签是0到9之间的整数。
  • 归一化:将图像像素值从0-255缩放到0-1之间,以便于模型更好地收敛。x_train / 255.0表示将训练集图像的像素值除以255。
3. 构建模型
model = models.Sequential([
    layers.Flatten(input_shape=(28, 28)),  # 将28x28的图像展平成784维向量
    layers.Dense(128, activation='relu'),  # 全连接层
    layers.Dropout(0.2),                   # Dropout层防止过拟合
    layers.Dense(10)                       # 输出层,对应10个类别
])
  • Sequential:顺序模型,按照从输入到输出的顺序堆叠各个层。
  • Flatten:将28x28的二维图像展平成一维向量(784个元素),作为全连接层的输入。
  • Dense:全连接层,第一个参数指定该层神经元的数量,activation='relu'指定了激活函数为ReLU(Rectified Linear Unit)。
  • Dropout:随机丢弃一部分神经元,防止模型过拟合。0.2表示每次训练时随机丢弃20%的神经元。
  • 最后一个Dense:输出层,包含10个神经元,对应10个类别(0到9的数字)。
4. 编译模型
loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)
model.compile(optimizer='adam', loss=loss_fn, metrics=['accuracy'])
  • SparseCategoricalCrossentropy:损失函数,用于多分类任务。from_logits=True表示模型输出的是未经softmax处理的logits。
  • optimizer='adam':优化算法,Adam是一种自适应学习率的优化算法,通常比传统的SGD(随机梯度下降)更有效。
  • metrics=['accuracy']:评估指标,这里选择准确率(accuracy)来衡量模型性能。
5. 训练模型
model.fit(x_train, y_train, epochs=5)
  • fit:开始训练模型。x_trainy_train分别是训练集的输入和标签,epochs=5表示训练5轮(每个epoch遍历一次整个训练集)。
6. 评估模型
model.evaluate(x_test, y_test, verbose=2)
  • evaluate:在测试集上评估模型性能。x_testy_test分别是测试集的输入和标签,verbose=2表示显示详细的评估过程。

http://www.kler.cn/a/459371.html

相关文章:

  • 计算机网络 (16)数字链路层的几个共同问题
  • node.js之---单线程异步非阻塞 I/O
  • 【C++】unordered系列关联式容器及其底层结构
  • 网络安全|如何正确识别网络钓鱼攻击?
  • 【信息系统项目管理师】第14章:项目沟通管理-基础和过程 考点梳理
  • python Celery 是一个基于分布式消息传递的异步任务队列系统
  • 物联网如何改变我们的生活:从智能家居到智慧城市
  • IEDA 使用auto Dev编码助手配置Deep Seek V3
  • Conmi的正确答案——JAVA获取远程HTTP客户端访问的IP
  • HarmonyOS Next 应用元服务开发-应用接续动态配置迁移保持迁移连续性
  • 使用 ThinkPHP 实现用户认证系统的详细教程
  • 【2024年-9月-21日-开源社区openEuler实践记录】PilotGo:简化运维管理的开源利器
  • 作业:day2
  • 畅游 Linux 开发天地:yum 与 vim 详解
  • wangEditor/editor自定义粘贴后续
  • Flink窗口window详解(分类、生命周期、窗口分配器、窗口函数、触发器)
  • Flume的概念和原理
  • 【大语言模型】DeepSeek与Kimi对论文内容理解的简单对比
  • 北京人形机器人产业发展与CES Asia 2025的科技展望
  • gozero项目接入elk的配置与实战