图像识别流程和不同分类器之间的区别

释放双眼,带上耳机,听听看~!
本文介绍了图像识别流程中的数据加载和预处理、模型构建、编译和训练,以及评估模型性能的步骤。另外还介绍了不同分类器之间的区别,以及它们在不同场景和数据集中的应用情况。

一、图像识别流程

  1. 数据加载和预处理

    • 将数据向量化

      在Keras自带的有些数据集中,图片信息已经处理过了,我们只需要对标签进行向量化。

      将标签向量化有两种方法:可以将标签列表转换为整数张量,或者使用 one-hot 编码。one-hot编码即将每个标签表示为全零向量, 只有标签索引对应的元素为 1。

    one-hot编码:

    ```
    def one_hot_encode(self, labels):
            one_hot_labels = np.zeros((len(labels), self.num_classes))
            for i, label in enumerate(labels):
                one_hot_labels[i, label] = 1
            return one_hot_labels
    ```
    
  2. 构建模型

    在构建神经网络模型时,需要关注四要素:

    • 层:多个层组成网络(或模型)
    • 输入数据及相应的目标
    • 损失函数:用于学习的反馈信号
    • 优化器:决定学习的过程如何进行
  3. 编译模型

    在编译模型时,需要指定损失函数、优化器和监控指标。

    model.compile(optimizer='adam',
                  loss='categorical_crossentropy',
                  metrics=['accuracy'])
    
  4. 训练模型

    在训练模型时,将输入数据和对应的标签传入模型中进行训练。可以指定训练的批次大小(batch size)和训练的轮数(epochs)。

    model.fit(input_data, one_hot_encoded_labels, epochs=epochs, batch_size=batch_size)
    
  5. 评估模型的性能

    • 记录模型在验证集上的性能指标(比如准确率),找出那些能够提高性能的超参数设置。
    • 使用组合的超参数设置重新训练模型,并在验证集上测试性能。选择那些性能最好的超参数组合作为最终设置。

二、不同的分类器之间的区别

常见的图像分类模型主要有以下几种:

  • Softmax回归(Logistic回归): 最简单的线性分类器,直接在最后一层使用softmax激活函数进行多分类。
  • SVM(支持向量机): 构建超平面将不同类别尽可能分开,使间隔最大化。非线性SVM可以通过核技巧进行非线性分类。
  • 决策树和随机森林: 通过学习决策规则对样本进行分类,树模型对异常值比较敏感。
  • K近邻(KNN): 根据测试样本在特征空间里与最近的训练样本的类别进行分类。
  • 神经网络: 包含卷积神经网络(CNN)、全连接网络等,通过多层非线性结构提取特征和分类。

主要的区别在于:

  • 使用场景不同

    根据数据集的特点,可以将问题分为线性可分的和非线性可分的。不同的类型自然也对应不同的分类器。

    • 线性可分问题: 逻辑回归、线性支持向量机等线性分类器适用于线性可分数据集,即可以通过一条直线(或超平面)将不同类别的样本完全分开。
    • 非线性可分问题: 决策树、随机森林、非线性支持向量机、神经网络等非线性分类器适用于非线性可分数据集,即类别之间的边界不是线性的,需要使用曲线或复杂的边界进行划分。
    • 而对于高维数据集,例如文本、图像等,神经网络等复杂分类器通常更具优势,因为它们可以学习到高维特征之间的复杂关系。
  • 在模型中使用的损失函数和优化算法不同

    • 对于二分类问题:

      • Softmax回归: 交叉熵损失函数
      • SVM: hinge loss
      • 逻辑回归: 对数损失函数
    • 对于多分类问题:

      • Softmax回归: 交叉熵损失函数
      • KNN: 不需要显式定义损失函数
      • 决策树: 基尼系数、信息增益等指标
      • 神经网络: 交叉熵损失函数
  • 鲁棒性和泛化能力

    不同分类器在处理噪声和缺失数据、对特征的敏感性、泛化能力等方面有所差异。例如,决策树对噪声和缺失数据相对较鲁棒,而神经网络在大规模数据上具有很强的泛化能力。

三、使用不同的更新方法优化神经网络

常见的损失函数:

  1. 均方损失(MSE)

图像识别流程和不同分类器之间的区别

其中f是模型的预测值,y是样本的真实值。MSE常用与回归任务中。

  1. 交叉熵损失
  • 二分类交叉熵损失函数

图像识别流程和不同分类器之间的区别

  • 多分类交叉熵损失函数

图像识别流程和不同分类器之间的区别

其中n是样本数目,m是分类数。

交叉熵损失常用于分类任务中。

常见的优化器:

  1. 梯度下降算法

    • 随机梯度下降法(SGD)

      每次随机从样本集中抽取一个样本对θ进行更新,更新公式为:

图像识别流程和不同分类器之间的区别

  • 批量梯度下降法 (BGD)

    每次随机从样本集中抽取M(batch_size)个样本进行迭代,迭代公式为:

图像识别流程和不同分类器之间的区别

  • 小批量梯度下降法(Mini-batch GD)

    在算法的每一步,从具有M个样本的训练集(已经打乱样本的顺序)中随机抽出一小批量进行迭代,迭代公式为:

图像识别流程和不同分类器之间的区别

  1. 梯度优化算法

    动量算法:动量优化方法引入物理学中的动量思想,加速梯度下降,有Momentum和Nesterov两种算法。

  • Momentum

    参数更新时在一定程度上保留之前更新的方向,同时又利用当前batch的梯度微调最终的更新方向。

    引入动量的具体方式是:通过计算梯度的指数加权平均数来积累之前的动量,进而替代真正的梯度。Momentum的优化函数的权重更新公式如下:

图像识别流程和不同分类器之间的区别

  • NAG

图像识别流程和不同分类器之间的区别

如果说Momentum算法是用一阶指数平滑,那么NGA算法则是使用了二阶指数平。Momentum算法类似用已得到的前一个梯度数据对当前梯度进行修正(类似一阶马尔科夫假设),NGA算法类似用已得到的前两个梯度对当前梯度进行修正(类似二阶马尔科夫假设),无疑后者得到的梯度更加准确,因此提高了算法的优化速度。

  1. 自适应学习率优化算法

    由于篇幅原因,这里只列举Adam算法。

    Adam本质上是带有动量项的RMSprop,它利用梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率。它的优点主要在于经过偏置校正后,每一次迭代学习率都有个确定范围,使得参数比较平稳。

    其公式为:

图像识别流程和不同分类器之间的区别

其中:

公式1是对梯度的一阶矩估计,用于得到带有动量的梯度值;

公式2是对梯度的二姐矩阵估计,用于得到每个权重参数的学习率权重参数; 公式3,4是对一阶二阶矩估计的校正。可以看出,直接对梯度的矩估计对内存没有额外的要求,而且可以根据梯度进行动态调整。

公式5是对学习率n形成的一个动态约束,而且有明确的范围。

  1. 正则化方法

    在使用神经网络时,为了防止过拟合, 进而增强泛化能力,一种常见的降低过拟合的方法就是强制让模型权重只能取较小的值,从而限制模型的复杂度,这使得权重值的分布更加规则。这种方法叫作权重正则化,其实现方法是向网络损失中添加与较大权重值相关的成本(cost)。

  • L1正则化:添加的成本与权重系数的绝对值(权重的L1范数)成正比。

图像识别流程和不同分类器之间的区别

  • L2正则化:添加的成本与权重系数的平方(权重的L2范数)成正比。

图像识别流程和不同分类器之间的区别

  • Dropout正则化

    L1、L2正则化是通过修改损失函数来实现的,而Dropout则是通过修改神经网络本身来实现的,它是在训练网络时用的一种trick。

    对某一层使用 dropout,就是在训练过程中随机将该层的一些输出特征舍弃(设置为 0)。

    dropout 比率(dropout rate)是被设为 0 的特征所占的比例,通常在 0.2~0.5 范围内。测试时没有单元被舍弃,而该层的输出值需要按 dropout 比率缩小,因为这时比训练时有更多的单元被激活,需要加以平衡。

本网站的内容主要来自互联网上的各种资源,仅供参考和信息分享之用,不代表本网站拥有相关版权或知识产权。如您认为内容侵犯您的权益,请联系我们,我们将尽快采取行动,包括删除或更正。
AI教程

如何突破ChatGPT的Token限制

2023-11-22 10:21:14

AI教程

Stable Diffusion基础能力:ControlNet之图片提示

2023-11-22 10:31:14

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索