【呆板学习】-深度学习模子

打印 上一主题 下一主题

主题 847|帖子 847|积分 2541

深度学习模子介绍

深度学习是呆板学习的一个分支,它通过构建多层的神经网络模子来模拟人脑的工作机制。深度学习模子具有强大的特征提取和表示本领,在图像辨认、语音辨认、自然语言处理等范畴取得了显著的成果。
重要组成部门



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


  • 卷积神经网络(CNN)

    • 适用于处理具有网格结构的数据,如二维图像。
    • 特点:局部连接、权值共享、池化操纵等。

  • 循环神经网络(RNN)及其变体LSTM/GRU

    • 得当处理序列数据,能够捕获时间依赖关系。
    • 解决是非期记忆问题,克制梯度消失。

  • 天生对抗网络(GAN)

    • 包含天生器与判别器两个部门,相互对抗训练。
    • 应用于图像天生、风格迁徙等创意使命。

  • Transformer

    • 引入自注意力机制,有效处理长距离依赖。
    • 在自然语言处理范畴体现良好,如BERT、GPT系列模子。

实例:使用TensorFlow实现简单的MNIST手写数字辨认

  1. import tensorflow as tf
  2. from tensorflow.keras import layers, models
  3. # 加载MNIST数据集
  4. mnist = tf.keras.datasets.mnist
  5. (x_train, y_train), (x_test, y_test) = mnist.load_data()
  6. x_train, x_test = x_train / 255.0, x_test / 255.0  # 归一化
  7. # 构建模型
  8. model = models.Sequential([
  9.     layers.Flatten(input_shape=(28, 28)),  # 将28x28的图像展平成784维向量
  10.     layers.Dense(128, activation='relu'),  # 全连接层
  11.     layers.Dropout(0.2),                   # Dropout层防止过拟合
  12.     layers.Dense(10)                       # 输出层,对应10个类别
  13. ])
  14. # 编译模型
  15. loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)
  16. model.compile(optimizer='adam', loss=loss_fn, metrics=['accuracy'])
  17. # 训练模型
  18. model.fit(x_train, y_train, epochs=5)
  19. # 评估模型
  20. model.evaluate(x_test, y_test, verbose=2)
复制代码
实例详细解释

我们将逐步剖析上述代码
1. 导入必要的库

  1. import tensorflow as tf
  2. from tensorflow.keras import layers, models
复制代码


  • tensorflow:深度学习框架,提供了构建、训练和摆设呆板学习模子所需的工具。
  • layers 和 models:来自Keras API,用于界说神经网络的层和模子结构。
2. 加载MNIST数据集

  1. mnist = tf.keras.datasets.mnist
  2. (x_train, y_train), (x_test, y_test) = mnist.load_data()
  3. 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. 构建模子

  1. model = models.Sequential([
  2.     layers.Flatten(input_shape=(28, 28)),  # 将28x28的图像展平成784维向量
  3.     layers.Dense(128, activation='relu'),  # 全连接层
  4.     layers.Dropout(0.2),                   # Dropout层防止过拟合
  5.     layers.Dense(10)                       # 输出层,对应10个类别
  6. ])
复制代码


  • Sequential:顺序模子,按照从输入到输出的顺序堆叠各个层。
  • Flatten:将28x28的二维图像展平成一维向量(784个元素),作为全连接层的输入。
  • Dense:全连接层,第一个参数指定该层神经元的数量,activation='relu'指定了激活函数为ReLU(Rectified Linear Unit)。
  • Dropout:随机抛弃一部门神经元,防止模子过拟合。0.2表示每次训练时随机抛弃20%的神经元。
  • 最后一个Dense层:输出层,包含10个神经元,对应10个种别(0到9的数字)。
4. 编译模子

  1. loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)
  2. model.compile(optimizer='adam', loss=loss_fn, metrics=['accuracy'])
复制代码


  • SparseCategoricalCrossentropy:丧失函数,用于多分类使命。from_logits=True表示模子输出的是未经softmax处理的logits。
  • optimizer='adam':优化算法,Adam是一种自顺应学习率的优化算法,通常比传统的SGD(随机梯度下降)更有效。
  • metrics=['accuracy']:评估指标,这里选择准确率(accuracy)来衡量模子性能。
5. 训练模子

  1. model.fit(x_train, y_train, epochs=5)
复制代码


  • fit:开始训练模子。x_train和y_train分别是训练集的输入和标签,epochs=5表示训练5轮(每个epoch遍历一次整个训练集)。
6. 评估模子

  1. model.evaluate(x_test, y_test, verbose=2)
复制代码


  • evaluate:在测试集上评估模子性能。x_test和y_test分别是测试集的输入和标签,verbose=2表示显示详细的评估过程。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

北冰洋以北

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表