深度学习面试题整理

文章目录

      • 1. ==TensorFlow是什么==?
      • 2. ==计算图==
      • 3. ==pytorch tensorflow==
      • 4. ==节点与张量类型==
      • 5. ==tensorboard==
      • 6. ==tensflow三个工作组件==
      • 7. ==大多数 TensorFlow 算法的常用步骤是什么?==
      • 8. ==处理TensorFlow中过拟合的方法==
      • 9. ==为什么出现过拟合==
      • 10. ==交叉验证==
      • 11. ==学习率==
      • 12. ==特征选择==
      • 13. ==正则化==
      • 14. ==损失函数==
      • 15. ==LSTM长短期记忆递归神经网络==
      • 16. ==激活函数==
      • 17. ==CNN==
      • 18. ==SVM==
      • 19. ==随机森林==
      • 20. ==交叉熵==
      • 21.==epoch与batchsize==
      • 21. ==softmax 与hardmax==
      • 22. ==梯度消失与爆炸==
      • 23. ==LSTM隐藏状态==
      • 24. ==LSTMP==
      • 25. ==GRU相比LSTM有什么不一样?==
      • ==RNN==
      • 26. ==GRU==
      • 27. ==数据不平衡问题==
      • 28. ==知识蒸馏和量化压缩==
      • 29. ==ADAM、SGD==
      • 29. ==隐藏态与细胞态==
      • 30. ==注意力机制==
      • 31. ==深度学习中的量化方法==
      • 32. ==计算机的存储结构==
      • 33.==什么是卷积?什么是池化?==
      • 34.==为什么不同的机器学习领域都可以使用CNN,CNN解决了这些领域的哪些共性问题?它是如何解决的?==
      • 35. ==CNN的特点以及优势?==
      • 36.==CNN的权重共享是怎么做的?==
      • 37.==CNN卷积层参数数量是怎么计算的?==
      • 38.==卷积感受野相关、1×1卷积核==
      • 38.==两个3×3卷积核与一个5×5卷积核==
      • 38.==对应模型压缩方法有了解吗?==
      • 39. ==知识蒸馏==
      • 39. ==batchnorm如何工作也就是BN==
      • 30.==混合精度训练==
      • 33. ==分布式训练==
      • 34. ==transformer==
      • 35. ==残差网络ResNet==
      • 36. ==数据清洗==
      • 36 ==图像变换==
      • ==去噪==
      • 35 ==滤波==
      • 36. ==边缘检测==
      • 36. ==图像分割==
      • 37. ==图像增强==
      • 37.==多标签分类==
  • 38 ==准确率、精确率、召回率、F1==

1. TensorFlow是什么

TensorFlow是一个强大的面向数据流的机器学习库,由谷歌的Brain Team创建,于2015年开源。它被设计成易于使用和广泛应用于数字和神经网络的问题以及其他领域。
它可以被认为是一个编程系统,在这个系统中,你将计算表示为图形。图中的节点表示数学运算,边缘表示它们之间通信的多维数据数组(张量)。
在TensorFlow所有的数据都是一个n维的数组,只是我们给它起了个名字叫做张量(Tensor
TensorFlow 由 Tensor 和 Flow 两个词组成; 张量被称为多维数组的数据表示,流表示对张量执行的一系列操作。TensorFlow 在内部将张量表示为基本数据类型的n维数组
优点:TensorFlow 的一些主要优点如下:
高性能计算:TensorFlow 提供了高效的计算优化和并行执行功能。它可以自动将计算图映射到可用的硬件资源,并充分利用多核 CPU、多个 GPU 或 TPU 来加速计算。
跨平台支持:TensorFlow 支持多种操作系统,包括 Linux、Windows 和 macOS。它可以在不同的硬件平台上运行,包括台式机、服务器、移动设备和云环境。
扩展性和可移植性:TensorFlow 提供了丰富的高级 API 和库,使得开发人员可以快速构建和训练各种深度学习模型,如卷积神经网络(CNN)、循环神经网络(RNN)、生成对抗网络(GAN)等。TensorFlow 还支持模型的导入和导出,使得模型可以在不同的环境和平台之间进行迁移和部署。
可视化和调试工具:TensorFlow 提供了一套强大的可视化和调试工具,如 TensorBoard。TensorBoard 可以用于可视化模型结构、训练过程和性能指标,帮助您理解和调试模型。此外,TensorFlow 还提供了丰富的调试功能,如断点调试、变量观察和计算图可视化,有助于排查问题并提高开发效率。

它具有自动区分功能。
它具有平台灵活性。
它易于定制和开源。

2. 计算图

计算图由节点和边组成,节点表示计算操作,边表示数据流动。
节点(Node):节点代表计算图中的操作,通常表示为数据处理或转换的函数。例如,节点可以是矩阵乘法、卷积操作或激活函数等。每个节点接收输入数据并执行相应的计算,产生输出结果。
边(Edge):边表示节点之间的依赖关系或数据流动。边连接了一个节点的输出和另一个节点的输入,将数据从一个节点传递到另一个节点。节点的输出可以作为其他节点的输入,从而形成了一个计算图中的数据流。
静态图:静态图是指在计算图构建阶段将整个计算图结构定义好,并在执行阶段使用相同的计算图进行计算。典型的静态图框架包括TensorFlow的早期版本和Caffe等。在静态图中,开发者需要先定义图的结构,包括输入、变量、操作和输出,然后通过session执行计算图中的操作。
优点:
静态图在构建阶段可以进行图优化,如常量折叠、公共子图消除等,提高计算效率。
可以将计算图导出为图结构文件,方便模型的保存和共享。
缺点:
静态图的构建过程相对复杂,需要先定义图的结构,然后再执行计算。
缺点也很明显,就是只有在计算图运行起来之后,才能看到变量的值
动态图:动态图是指在执行阶段根据需要动态构建计算图,并实时执行计算。典型的动态图框架包括PyTorch和TensorFlow的Eager Execution模式。
动态图是一边运行一边构建,
优势是可以在搭建网络的时候看见变量的值,可以实时查看变量的值、输出结果等,方便调试和错误排查。。
缺点:
动态图的执行过程中无法进行图优化,可能导致一些计算效率的损失。

3. pytorch tensorflow

这两个框架都基于基础数据类型张量(tensor)而工作
TensorFlow和PyTorch都是流行的深度学习框架,它们在设计和使用上有一些区别。
动态图 vs. 静态图:PyTorch使用动态图,这意味着您可以按照常规的编程方式编写和调试代码,使用Python控制流语句等。这种动态图的优势在于更直观和易于调试。TensorFlow在早期版本中使用了静态图,但在TensorFlow 2.0之后引入了更加灵活的即刻执行(eager execution)模式,这使得TensorFlow的编程方式更接近PyTorch。
模型定义:在PyTorch中,模型的定义是通过Python类和函数进行的。您可以直接操作Python对象,编写自定义的模型结构和计算过程。TensorFlow使用更为静态的方式,通常使用Keras或tf.Module来定义模型,这些API提供了高级抽象和组件,使得模型定义更加简洁。
部署和生产环境:TensorFlow在模型的部署和生产环境方面更具优势。它提供了TensorFlow Serving和TensorFlow Lite等工具和库,可以轻松地将训练好的模型部署到服务器端、移动设备和嵌入式系统中。TensorFlow还有更广泛的产业支持,被广泛应用于工业界。PyTorch更多地用于研究和实验室环境,部署相对来说略显复杂。
社区和生态系统:两个框架都有庞大的社区和活跃的生态系统,提供了大量的教程、文档和示例代码。但是,由于TensorFlow具有更早的发布时间和更广泛的产业应用,其社区和生态系统可能更为庞大和丰富一些。

4. 节点与张量类型

节点代表计算图中的操作,通常表示为数据处理或转换的函数。
存储节点:有状态的变量操作,通常用于存储模型参数
计算节点:无状态的计算和控制操作,主要负责算法的逻辑或流程的控制
数据节点:数据的占位符操作,用于描述图外输入的数据
存储节点用于存储模型参数,计算节点用于执行各种操作和计算,而占位符用于在执行计算图时提供输入数据。它们共同构成了 TensorFlow 计算图的基本组成部分,用于定义和执行复杂的计算任务和模型。
可以使用 tf.cast() 函数在不同的数据类型之间进行转换
张量
常数张量用于存储不可变的数值数据,可变张量用于存储可训练的模型参数,而占位符张量用于在执行计算图时提供动态的输入数据。它们在 TensorFlow 中扮演了不同的角色,用于支持数据的存储、计算和输入操作。

5. tensorboard

TensorBoard 是一套可视化工具,用于检查和理解 TensorFlow 运行和图表。这是创建者提供的 Tensorflow 的简单解决方案,让我们可视化图表。它绘制关于图形的定量指标以及要通过它的图像等附加数据。TensorBoard 目前支持五种可视化技术,如标量、图像、音频、直方图和图形。它提高了图形的准确性和流动性。

6. tensflow三个工作组件

TensorFlow 架构分为三个部分:
预处理数据
构建模型
训练和估计模型

7. 大多数 TensorFlow 算法的常用步骤是什么?

大多数 TensorFlow 算法的常用步骤是:
通过占位符导入数据、生成数据或设置数据管道。
通过计算图提供数据。
评估损失函数的输出。
使用反向传播来修改变量。
重复直到停止条件。

8. 处理TensorFlow中过拟合的方法

在 TensorFlow 中,有几种常用的方法可以应对过拟合问题,这些方法可以帮助提高模型的泛化能力并减少过拟合的风险:
数据集扩充(Data Augmentation):通过对训练数据进行随机变换和扩充,可以增加训练样本的多样性。例如,在图像分类任务中,可以应用随机裁剪、旋转、平移、翻转等操作来扩充数据集。这样做可以帮助模型更好地学习数据的不变性,并减少过拟合的风险。
正则化(Regularization):正则化是通过在损失函数中引入额外的惩罚项,限制模型参数的复杂度,从而减少过拟合。在 TensorFlow 中,常用的正则化技术包括 L1 正则化、L2 正则化和弹性网络等。通过在模型训练过程中加入正则化项,可以使模型倾向于学习简单的模式,避免过度拟合。
Dropout 是一种常用的正则化技术,用于防止神经网络模型的过拟合。它通过在训练过程中随机丢弃一部分神经元的输出,以减少神经元之间的依赖关系,这样可以防止某些神经元过度拟合训练数据,从而提高模型的泛化能力。

Dropout 的原理如下:
随机丢弃神经元:在每次训练迭代中,以一定的概率丢弃隐藏层的神经元。丢弃神经元的过程是随机的,每个神经元都有相同的丢弃概率。
减少神经元之间的依赖:通过丢弃神经元,强制模型不依赖于特定的神经元,减少神经元之间的复杂依赖关系。这样可以防止某些神经元过度拟合训练数据,促使其他神经元更好地学习数据的不同特征。
模型集成:由于每次训练迭代中随机丢弃了部分神经元,相当于在每次迭代中训练了不同的子网络。最终的模型相当于这些子网络的集成,可以看作是多个模型的平均。
Dropout 的作用在于减少神经网络模型的复杂度,防止模型对训练数据过度拟合,提高模型的泛化能力。它通过随机丢弃神经元,使模型无法过度依赖特定的神经元,从而降低模型的方差,减少过拟合的风险。

早停法(Early Stopping):早停法是一种简单而有效的方法,通过在训练过程中监控验证集的性能,并在验证集性能不再提升时停止训练,从而防止模型过拟合。在 TensorFlow 中,您可以在训练过程中周期性地评估验证集的性能,并保存在验证集上表现最好的模型。
Dropout:Dropout 是一种常用的正则化技术,通过在训练过程中以一定概率随机将一部分神经元输出置为零,以减少神经元之间的依赖关系。这样做可以降低模型对特定神经元的过度依赖,增加模型的泛化能力。在 TensorFlow 中,您可以使用 tf.keras.layers.Dropout 层添加 Dropout 操作。
批标准化(Batch Normalization):批标准化是一种常用的正则化和加速训练的技术,通过在每个批次的数据上进行归一化,减少不同批次之间的内部协变量偏移和梯度爆炸问题。批标准化可以帮助加速收敛并提高模型的泛化能力。在 TensorFlow 中,您可以使用 tf.keras.layers.BatchNormalization 层添加批标准化操作。
模型复杂度控制:过拟合通常与模型复杂度过高相关。在设计模型时,可以考虑减少模型的参数量、层数或每层的神经元数量,以降低模型复杂度,从而减少过拟合的风险。可以通过调整模型的结构和超参数来控制模型复杂度。
这些方法可以单独使用或结合使用,根据具体情况来应对过拟合问题。通过合理使用数据扩充、正则化技术、早停法、Dropout、批标准化以及适当控制模型复杂度,可以提高模型的泛化能力并减少过拟合的发生。

9. 为什么出现过拟合

过拟合(Overfitting)是指机器学习模型在训练数据上表现很好,但在新样本上表现较差的情况。过拟合通常是由以下原因导致的:
数据量不足:当训练数据集较小或样本数量不足时,模型可能过度学习训练数据的特定样本和噪声,而无法泛化到新的样本上。
模型复杂度过高:如果模型的容量过大,参数数量过多,模型可以过度拟合训练数据,甚至记忆训练集的噪声和异常值,导致在新数据上表现不佳。
特征选择不当:选择过多的特征或选择与目标任务不相关的特征可能导致过拟合。模型可能会过度关注噪声或无关的特征,而无法正确捕捉数据的真实模式。
训练集中存在噪音。噪音大到模型过分记住了噪音的特征,反而忽略了真实的输入输出间的关系。
训练时间过长:如果模型训练时间过长,可能会导致模型在训练数据上过度拟合,因为模型有更多的机会记住和适应训练数据的细节,而忽略了泛化到新数据的能力。
训练集与测试集分布不一致:当训练集与测试集之间的分布不一致时,模型可能过度适应训练集的特定分布,而无法适应测试集的分布,导致过拟合。
缺乏正则化:正则化技术,如 L1 正则化、L2 正则化等,可以限制模型参数的复杂度,防止模型过拟合训练数据。

10. 交叉验证

使用交叉验证是一种常用的方法来评估模型的性能和防止过拟合。交叉验证通过将数据集划分为多个子集,并在这些子集上进行模型训练和评估,以更全面地评估模型的泛化能力。
下面是使用交叉验证来防止过拟合的一般步骤:
**数据集划分:**将原始数据集划分为 K 个互斥的子集,通常使用 K-Fold 交叉验证。每个子集称为一个“折”(fold),通常选择 K 值为 5 或 10。
模型训练与评估:对于每个折,将其中 K-1 折作为训练集,剩下的 1 折作为验证集。在训练集上训练模型,并在验证集上评估模型性能。重复该过程 K 次,每次使用不同的折作为验证集。
性能度量:对于每次训练和评估,可以计算模型在验证集上的性能度量,如准确率、精确率、召回率、F1 分数等。可以将这些度量的平均值作为模型的最终性能评估。
模型选择:根据模型在交叉验证中的平均性能选择最佳模型。可以比较不同模型或不同超参数设置的模型,并选择性能最好的模型。
交叉验证的优点在于它能更好地评估模型的性能,并减少对特定数据划分的依赖性。它可以提供更稳健的性能估计,帮助我们更准确地选择模型,并减少过拟合的风险。

需要注意的是,交叉验证可能会增加计算成本,因为需要进行多次模型训练和评估。此外,交叉验证并不能消除过拟合的可能性,但可以帮助我们更好地监测和控制模型的泛化能力。
最终选择的模型不是这五个模型中的其中一个,这里的模型不是k个当中的,而是采用不同的方法如svm\dnn来构建模型,分别采用交叉验证,可以得出svm与dnn的平均性能,对比选择较好的

11. 学习率

网络学习率(Learning Rate)是深度学习中的一个重要超参数,用于控制模型在每次参数更新时的步长大小。它决定了模型在参数空间中沿着梯度方向更新的速度。
学习率的选择对模型的训练过程和性能有着重要的影响。如果学习率设置得太小,模型收敛的速度会很慢,需要更多的迭代次数才能达到较好的效果;而如果学习率设置得太大,模型可能会在参数空间中震荡或发散,导致无法收敛或无法获得准确的结果。
一般来说,学习率的选择需要根据具体的任务和模型来进行调整和优化。常见的学习率调整策略包括以下几种:
固定学习率:将学习率设置为一个固定的常数,不进行调整。适用于简单的任务和数据集,或者对于已经找到合适学习率的情况。
手动调整学习率:根据训练过程中的观察和经验,手动调整学习率的大小。可以根据模型在验证集上的表现进行调整,逐步减小学习率来提高模型的性能。
学习率衰减(Learning Rate Decay):随着训练的进行,逐渐减小学习率。可以按照固定的衰减策略,如按照固定的步长进行衰减,或者根据训练过程中的指标动态调整衰减速度。
自适应学习率:根据模型参数的更新情况自适应地调整学习率。常见的自适应学习率算法有AdaGrad、RMSProp、Adam等,它们根据参数的历史梯度信息来调整学习率的大小。
学习率策略搜索:通过尝试不同的学习率设置,观察模型的表现,选择在验证集上表现最好的学习率。可以使用网格搜索、随机搜索等方法进行学习率的搜索。
在实际应用中,学习率的选择是一个经验性的问题,需要结合实际情况和试验来进行调整和优化。常常需要进行多次实验,观察模型的收敛速度和性能表现,不断调整学习率以达到较好的训练效果。

12. 特征选择

根据特征选择的形式,可分为三大类:
Filter(过滤法):按照发散性或相关性对各个特征进行评分,设定阈值或者待选择特征的个数进行筛选
分别对每个特征 x_i ,计算 x_i 相对于类别标签 y 的信息量 S(i) ,得到 n 个结果。然后将 n 个 S(i) 按照从大到小排序,输出前 k 个特征

  • Pearson相关系数
    Pearson 相关系数可以用于筛选特征向量,以评估特征与目标变量之间的线性关系强度和方向。它衡量了两个连续变量之间的线性相关性,取值范围为 -1 到 1。
  • 方差选择法
    过滤特征选择法还有一种方法不需要度量特征 x_i 和类别标签 y 的信息量。这种方法先要计算各个特征的方差,然后根据阈值,选择方差大于阈值的特征。
    对于类别型数据,可以使用卡方验证、互信息等方法进行特征选择。而对于数值型数据,可以使用相关系数、方差选择、主成分分析等方法进行特征选择。
    Wrapper(包装法):根据目标函数(往往是预测效果评分),每次选择若干特征,或者排除若干特征
    基本思想:基于hold-out方法,对于每一个待选的特征子集,都在训练集上训练一遍模型,然后在测试集上根据误差大小选择出特征子集。需要先选定特定算法,通常选用普遍效果较好的算法, 例如Random Forest, SVM, kNN等等。
    Embedded(嵌入法):先使用某些机器学习的模型进行训练,得到各个特征的权值系数,根据系数从大到小选择特征(类似于Filter,只不过系数是通过训练得来的)
    基于惩罚项的特征选择法 通过L1正则项来选择特征:L1正则方法具有稀疏解的特性,因此天然具备特征选择的特性。

13. 正则化

原理:对所有参数进行正则化,为了使损失函数尽可能的小,所有的参数的值(不包括)都会在一定程度上减小,但是减少程度会不一样,从而实现了权重衰减、简化模型复杂度的作用,在损失函数中加入惩罚项,如参数绝对值之和,为了让整个损失函数最小,所以模型参数会减小达到这个目的

正则化是一种常用的机器学习技术,用于控制模型的复杂度,防止过拟合,并提高模型的泛化能力。正则化通过在损失函数中引入额外的惩罚项,促使模型参数保持较小的值或稀疏性,从而避免模型对训练数据过度拟合。
在正则化中常用的两种惩罚项是L1正则化(L1 Regularization)和L2正则化(L2 Regularization):
L1正则化:L1正则化通过在损失函数中添加模型参数的绝对值之和作为惩罚项,可以使一些特征的权重变为零,从而实现特征选择和稀疏性。L1正则化推动模型使用较少的特征,对于特征选择和降维具有较好的效果。
L2正则化:L2正则化通过在损失函数中添加模型参数的平方和作为惩罚项,限制模型参数的取值范围,使模型参数保持较小的值。L2正则化对于处理多重共线性问题(当特征之间存在高度相关性时)和减少过拟合都有一定效果。
正则化参数(正则化系数)是控制正则化程度的重要参数。较大的正则化参数会导致模型更加简单,但可能会减少模型的拟合能力;较小的正则化参数则可能导致模型过拟合。因此,选择适当的正则化参数需要进行调优和验证。
在机器学习算法中,正则化可以应用于各种模型,包括线性回归、逻辑回归、支持向量机、神经网络等。通过正则化,可以改善模型的泛化能力,提高模型的性能和稳定性。

14. 损失函数

交叉熵
均方误差

15. LSTM长短期记忆递归神经网络

RNN:
在传统的循环神经网络(RNN)中,梯度消失和梯度爆炸问题经常发生,特别是在处理长序列数据时。这是因为反向传播中的梯度在每个时间步都会经过一个相同的权重矩阵的乘积,导致梯度在传递过程中指数级地增长或衰减 RNN:每一项一项进行相加,可以发现距离拉的越长,连乘的项就越多,远距离的梯度会趋于0的,近距离的梯度不会消失。RNN梯度消失的真正含义是总的梯度受近距离梯度的主导,远距离的梯度消失。
梯度消失是指在反向传播过程中,梯度逐渐变小并趋近于零,导致参数更新的幅度很小,使得网络无法有效地学习。这通常发生在使用具有饱和激活函数(如Sigmoid、Tanh)的网络中,当网络层数较多时,梯度会逐层地缩小,最终变得非常接近于零。
梯度爆炸是指在反向传播过程中,梯度逐渐变大并超过了一定阈值,导致参数更新的幅度很大,使得网络无法稳定地收敛。梯度爆炸通常发生在网络层数较多、参数初始化不当或学习率设置过大的情况下,导致梯度指数级增长。
梯度是指代表目标函数关于模型参数的导数或偏导数的向量。梯度提供了目标函数在当前参数值处的变化率信息,可以指导模型参数的更新过程。梯度的大小代表当前参数对损失函数的影响程度,梯度的正负代表对损失函数影响的方向,正会增大损失函数值,负会减小损失函数值。
LSTM(Long Short-Term Memory)是一种循环神经网络(Recurrent Neural Network,RNN)的变体,专门用于处理序列数据,具有较好的长期依赖建模能力。
与传统的循环神经网络相比,LSTM引入了门控机制,可以更好地控制信息的流动和记忆。LSTM中的主要组成部分包括:
记忆单元是LSTM模型中用于存储和更新信息的一个关键组件。它是一个内部状态变量**,用于记忆和传递过去时间步的相关信息**。记忆单元可以看作是模型在每个时间步记住的“记忆”
记忆单元(Cell State):LSTM的核心是记忆单元,用于存储和传递信息。记忆单元可以在很长的序列中保持信息,并选择性地丢弃或更新信息。LSTM引入了记忆单元(memory cell),记忆单元的维度与隐藏状态的维度相同(一些文献认为记忆单元是一种特殊的隐藏状态),并设计用于记录额外的信息。因此hidden state里包含的记忆,实际上是cell state衰减之后的内容,际上hidden state里存储的,主要是“近期记忆”;cell state里存储的,主要是“远期记忆”。
输入门(Input Gate):输入门决定新的输入信息如何被添加到记忆单元中。通常,输入门使用 sigmoid 函数作为激活函数。Sigmoid 函数的输出范围在 0 到 1 之间,表示输入信息的比例被保留。
遗忘门(Forget Gate):遗忘门决定之前的记忆单元中的哪些信息应该被丢弃。遗忘门也使用 sigmoid 函数作为激活函数。它根据输入和前一个记忆单元的状态来输出一个 0 到 1 之间的值,表示保留前一个记忆单元的比例。
输出门(Output Gate):输出门控制着隐藏状态中的哪些信息将被输出到下一层或作为模型的最终输出。输出门通常使用 sigmoid 函数作为激活函数,用于确定输出的比例。此外,输出门还使用 tanh 函数作为激活函数,将记忆单元的当前状态进行缩放,输出一个在 -1 到 1 之间的值。
隐藏状态隐藏状态是LSTM模型在每个时间步的一个输出**, 它可以看作是模型对过去观察到的序列信息的编码表示。隐藏状态包含了模型在当前时间步之前观察到的所有历史信息,并且在后续时间步中会被用作输入来影响模型的决策。
(Hidden State)的计算是在输出门阶段进行的。输出门通过sigmoid激活函数生成一个在0到1之间的输出,表示对于每个隐藏状态的哪些信息应该被输出。 输出门的输出会与当前时间步的记忆单元进行点乘操作,并经过tanh激活函数处理,从而得到当前时间步的隐藏状态
所以,在遗忘门之后和输出门之前的阶段,隐藏状态并没有直接进行更新。隐藏状态的更新是在输出门阶段,通过输出门的输出与记忆单元的点乘操作得到的。
LSTM通过这些门控机制,能够有效地处理长序列数据,并且在模型训练过程中能够较好地保持和传递梯度。这使得LSTM在很多序列相关的任务中表现出色,例如语言建模、机器翻译 .

16. 激活函数

激活函数在神经网络中起着非常重要的作用,它们引入非线性性质,使神经网络能够学习和表示复杂的非线性关系。以下是一些常见的激活函数类型及其作用:
Sigmoid 函数:Sigmoid 函数将输入映射到一个范围在 0 到 1 之间的值。它的公式为 f(x) = 1 / (1 + exp(-x))。Sigmoid 函数在深层网络中容易出现梯度消失的问题,但在输出层进行二分类问题的概率预测时常用。
ReLU 函数:ReLU 函数是一种简单而常用的激活函数,它将负值直接置为零,而正值保持不变。ReLU 函数的公式为 f(x) = max(0, x)。ReLU 函数能够有效地缓解梯度消失问题,使得神经网络能够更快地收敛。它常用于隐藏层的激活函数。
缺点是:
Relu的输入值为负的时候,输出始终为0,其一阶导数也始终为0,这样会导致神经元不能更新参数,也就是神经元不学习了,这种现象叫做“Dead Neuron”
为了解决Relu函数这个缺点,在Relu函数的负半区间引入一个泄露(Leaky)值,所以称为Leaky Relu函数
Leaky ReLU 函数:Leaky ReLU 函数是对 ReLU 函数的改进,当输入为负值时,它不是严格地置零,而是乘以一个小的斜率(如0.01)。这样可以避免 ReLU 函数的神经元“死亡”问题,即负值区域梯度为零导致神经元无法更新。
Tanh (双曲正切函数)函数:Tanh 函数将输入映射到范围在 -1 到 1 之间的值。它的公式为 f(x) = (exp(x) - exp(-x)) / (exp(x) + exp(-x))。Tanh 函数具有中心对称的特性,输出在负值和正值之间有更大的动态范围,常用于隐藏层的激活函数。
Softmax 函数:Softmax 函数将输入向量归一化为概率分布,常用于多类别分类问题的输出层。Softmax 函数的公式为 f(x_i) = exp(x_i) / (sum(exp(x_j))),其中 x_i 是输入向量中的第 i 个元素。
不同的激活函数适用于不同的场景和问题。选择适当的激活函数可以提高神经网络的表达能力和学习能力,有助于网络的训练和性能改进。激活函数是用来加入非线性因素的,提高神经网络对模型的表达能力,解决线性模型所不能解决的问题

17. CNN

积神经网络主要由这几类层构成:输入层、卷积层,ReLU层、池化(Pooling)层和全连接层(全连接层和常规神经网络中的一样)。通过将这些层叠加起来,就可以构建一个完整的卷积神经网络。在实际应用中往往将卷积层与ReLU层共同称之为卷积层,所以卷积层经过卷积操作也是要经过激活函数的。具体说来,卷积层和全连接层(CONV/FC)对输入执行变换操作的时候,不仅会用到激活函数,还会用到很多参数,即神经元的权值w和偏差b;而ReLU层和池化层则是进行一个固定不变的函数操作。卷积层和全连接层中的参数会随着梯度下降被训练,这样卷积神经网络计算出的分类评分就能和训练集中的每个图像的标签吻合了。
通道:输入通道个数 等于 卷积核通道个数
2:卷积核个数 等于 输出通道个数
可以理解为卷积核的个数,卷积核是二维,过滤器是卷积核的集合,是三维的概念,对于图像来说,具有RGB三个通道,一个卷积核要在三个通道上进行卷积操作,最后整合输出为一个通道,因为只有一个卷积核
卷积层Convolutional Layer):卷积层是 CNN 的核心组件,用于提取输入数据中的特征。它通过应用多个卷积核(过滤器)对输入进行卷积操作,得到一系列特征图。每个卷积核都会在输入数据上滑动,进行元素乘法和求和操作,从而将局部特征提取出来。卷积操作可以保留空间结构和局部相关性,使得网络能够有效地捕捉图像中的特征 。
卷积的计算量可以通过以下公式进行估算:
计算量 = 输入特征图的大小 × 输入通道× 卷积核大小 × 卷积核数量
池化层Pooling Layer池化层用于降低特征图的空间尺寸,并减少参数量。常见的池化操作包括最大池化(Max Pooling)和平均池化(Average Pooling)。池化层通过在局部区域内选择最大值或计算平均值来减小特征图的尺寸。池化操作有助于减少数据的计算量,提高模型的计算效率,并具有一定程度的平移不变性。
全连接层(Fully Connected Layer):全连接层将前面的卷积和池化层的输出的特征图展平为一维向量,把所有局部特征,结合变成全局特征,最终产生网络的输出结果。
最大池化与平均池化:
在选择最大池化和平均池化之间,通常需要考虑以下几个因素:
特征提取:最大池化可以更好地突出图像或特征中的显著信息,这对于图像分类等任务可能更为有效。而平均池化则对整个区域取平均值,更多地考虑了整体信息,适用于某些平滑性要求较高的任务。
噪声和异常值的影响:最大池化对于噪声和异常值比较敏感,因为它选择了局部区域中的最大值。如果数据中存在噪声或异常值,可能会导致最大池化的结果受到影响。平均池化则对噪声和异常值具有一定的鲁棒性。
计算效率:平均池化的计算量相对较小,因为它只是对局部区域取平均值,而最大池化需要比较局部区域中的数值并选择最大值。如果在计算资源有限的情况下,平均池化可能更为合适。
综合考虑以上因素,最大池化适用于强调局部显著信息的任务,例如目标检测和边缘检测;而平均池化适用于更加平滑的任务。

18. SVM

支持向量机(Support Vector Machine,SVM)是一种监督学习算法,主要用于二分类问题,但也可以扩展到多类别分类。SVM 的目标是找到一个最优的超平面,将不同类别的样本分隔开
以下是对 SVM 的详细解释:
线性可分情况:在线性可分的情况下,SVM 的目标是找到一个最优的超平面,将正例样本和负例样本完全分开,并且最大化两个类别之间的间隔。这个超平面可以通过一个线性方程表示,即 w^T x + b = 0,其中 w 是法向量(决定了超平面的方向),b 是偏置项。分类时,样本点的特征向量 x 被投影到超平面上,根据投影的位置确定其类别。
软间隔与松弛变量:在实际问题中,样本数据很可能不是完全线性可分的,这时可以引入软间隔和松弛变量来容忍一些错误分类。软间隔 SVM 允许一些样本点位于间隔内或甚至错误分类,通过权衡间隔的大小和误分类的数量来寻求最优解。
核函数:当数据不是线性可分的时候,可以使用核函数来将数据映射到高维特征空间,从而使其在高维空间中线性可分。常用的核函数包括线性核、多项式核、高斯核(径向基函数)等。通过核函数,可以避免直接在高维空间中进行计算,从而降低了计算复杂度
支持向量:在 SVM 中,支持向量是离超平面最近的样本点,它们决定了最优超平面的位置和形状。支持向量的数量相对于整个数据集来说很少,因此 SVM 是一种稀疏模型,具有较好的泛化能力。
正则化参数和优化算法:SVM 中的正则化参数 C 控制了对误分类的惩罚程度,较大的 C 值会更加强调对误分类的惩罚,可能导致更复杂的决策边界。在优化问题中,常用的算法有序列最小最优化算法(Sequential Minimal Optimization,SMO)和梯度下降算法等。
总体而言,SVM 是一种强大的分类算法,它在解决线性可分和线性不可分问题时表现良好。通过合适的核函数选择和调整参数,SVM 可以处理复杂的非线性问题,并具有较好的泛化能力。
SVM(支持向量机)中的核函数可以通过映射将输入特征空间映射到高维空间,甚至是无穷维空间。这种映射可以帮助 SVM 在原始特征空间中无法线性可分的情况下,通过在高维空间中的线性分割超平面来实现分类。
核函数是 SVM 中的一个重要概念,它允许在不显式计算高维特征空间的情况下,直接在原始特征空间中计算内积。常见的核函数有线性核、多项式核、高斯(RBF)核等。这些核函数的作用是通过对输入样本进行非线性映射,将低维特征空间中的数据映射到更高维的特征空间中,从而在高维空间中实现线性可分。
对于某些核函数,如高斯核函数(RBF),它使用的映射函数可以将样本映射到无穷维的特征空间。这意味着 SVM 可以处理非常复杂的非线性关系,并在无穷维空间中寻找最优的分割超平面,从而实现更高的分类性能。
通过使用核函数,SVM 可以有效地处理具有复杂结构和非线性关系的数据,提高分类的准确性。它允许在高维空间中进行线性分割,而无需直接计算高维特征空间。这使得 SVM 在处理高维数据和复杂问题时具有很大的优势。
以下是几种常见的 SVM 多分类方法:
一对一(One-vs-One)方法:该方法将多类别问题分解为多个二分类子问题。对于 k 个类别,需要训练 k*(k-1)/2 个二分类器,每个二分类器只区分两个类别之间的样本。在预测时,通过投票或加权投票来确定最终的类别。
一对其余(One-vs-Rest)方法:该方法将多类别问题分解为多个二分类子问题。对于 k 个类别,需要训练 k 个二分类器,每个二分类器将一个类别作为正例,将其他所有类别作为负例。在预测时,选择具有最高置信度或决策函数值的类别作为预测结果。

19. 随机森林

集成学习:成学习(Ensemble Learning)是一种通过组合多个基学习器来提升模型性能的机器学习方法。主要思想是通过组合多个模型的预测结果,来降低模型的方差、提高泛化能力,并取得更好的性能表现。通过集成学习,可以利用多个模型的优势,弥补各个模型之间的缺陷,提高模型的稳定性和准确性
常见的集成学习方法包括:
好几个分类器投票决策(投票法):基于多个分类器的投票结果,选择得票最多的类别作为最终预测结果。
平均预测结果(平均法):将多个分类器的预测结果进行平均,得到最终的预测结果。
基于权重的集成(加权法):给每个分类器分配一个权重,将分类器的预测结果加权求和,得到最终的预测结果。
随机森林(Random Forest)是一种集成学习方法,由多个决策树构成。它结合了决策树的预测能力和集成学习的优点,能够在分类和回归问题中取得很好的效果。以下是对随机森林的详细解释:
决策树:随机森林的基本组成单元是决策树。决策树是一种树状结构,其中每个内部节点表示一个特征或属性,每个叶节点表示一个类别或值。通过一系列特征的判断和分支,决策树可以对输入样本进行分类或回归预测
集成学习:随机森林利用集成学习的思想,通过组合多个决策树来提高整体的预测性能。每个决策树独立地对样本进行预测,然后通过投票(分类问题)或平均(回归问题)来确定最终的预测结果。集成学习能够减少单个模型的过拟合风险,并提高整体的稳定性和泛化能力。
随机性:随机森林中引入了两种随机性:特征随机性和样本随机性。特征随机性意味着在构建决策树的过程中,每个节点的划分特征是从总特征集合中随机选择的一部分特征。样本随机性意味着在训练每个决策树时,采用了有放回的随机抽样(即 bootstrap 抽样),这样每个决策树的训练集是略有差异的。
(1)如果训练集大小为N,对于每棵树而言,随机且有放回地从训练集中的抽取N个训练样本(就是bootstrap sample方法, 拔靴法采样)作为该树的训练集;从这里我们可以知道:每棵树的训练集都是不同的,而且里面包含重复的训练样本。
(2)如果存在M个特征,则在每个节点分裂的时候,从M中随机选择m个特征维度(m << M),使用这些m个特征维度中最佳特征(最大化信息增益)来分割节点。在森林生长期间,m的值保持不变。m选择可以通过OOB (袋外错误率)来进行一个较好的选择。
OOB (袋外错误率):根据有放回采样,大概会有1/3的数据没被采到,这些数据作为袋外样本,构建好的决策树对这些样本进行预测,根据投票输出结果,得到目前整个森林的误分率,通过比较误分率选择合适的特征数m.
参数调节:随机森林的性能和调节参数有关。常见的参数包括决策树数量(即森林中决策树的个数)、每棵决策树的最大深度、特征随机性的比例等。通过交叉验证等技术,可以选择最优的参数配置,以获得最佳的性能。
决策树的构建过程可能存在过拟合问题,因此在实际应用中常常需要采取一些策略,如剪枝、限制决策树的最大深度、增加样本数量等,以提高决策树的泛化能力。
决策树构建过程
决策树的构建一般包含三个部分:特征选择、树的生成、剪枝
构建决策树的过程可以概括为以下四个步骤:
特征选择:从所有特征中选择一个最优特征进行划分。常见的特征选择标准有信息增益(Information Gain)、信息增益比(Gain Ratio)、基尼指数(Gini Index)等。
决策树生成:根据选择的特征,将数据集划分为若干个子集。为每个子集生成对应的子节点,并将这些子节点作为当前节点的分支。对每个子节点,重复第1步和第2步,直到满足停止条件。
停止条件:当满足以下任一条件时,停止决策树的生成:
所有特征已经被用于划分;
所有子集中的样本都属于同一类别;
子集中样本数量不足以继续划分。
剪枝:预剪枝:
预剪枝说白了通过提前停止树的构建而对树剪枝,一旦停止,该节点就作为叶子节点了。
停止决策树生长最简单的方法有:
定义一个高度,当决策树达到该高度时就停止决策树的生长
达到某个节点的实例具有相同的特征向量,及时这些实例不属于同一类,也可以停止决策树的生长。这个方法对于处理数据的数据冲突问题比较有效。
定义一个阈值,当达到某个节点的实例个数小于阈值时就可以停止决策树的生长
定义一个阈值,通过计算每次扩张对系统性能的增益,并比较增益值与该阈值大小来决定是否停止决策树的生长。
后剪枝:是在整个树构建完成后,根据一些指标来进行决定是否剪枝。
Reduced-Error Pruning(REP,错误率降低剪枝)
Pesimistic-Error Pruning(PEP,悲观错误剪枝)
Cost-Complexity Pruning(CCP,代价复杂度剪枝)
在这里插入图片描述
ID3算法:
ID3算法是最早被提出的决策树算法之一,它主要用于处理分类问题。ID3算法的核心思想是在构建决策树的过程中,选择信息增益最大的属性作为分裂点。ID3算法易受噪声数据的影响,因此适用于数据集较为清晰、噪声较少的情况。
C4.5算法:
C4.5算法是ID3算法的改进版本,它不仅可以处理分类问题,还可以处理回归问题。C4.5算法采用信息增益比来选择最优特征,同时还引入了剪枝策略,可以有效地避免过拟合的问题。C4.5算法适用于数据集中包含噪声数据的情况。
CART算法:
CART(Classification and Regression Tree)算法既可以处理分类问题,也可以处理回归问题。CART算法采用“基尼系数”来选择最优特征,并使用二叉树的形式构建决策树。CART算法可以处理非常大的数据集,因此适用于大规模数据集的场景。
总之,ID3算法适用于数据集较为清晰、噪声较少的情况,C4.5算法适用于数据集中包含噪声数据的情况,而CART算法适用于大规模数据集的场景。
特征选择:
信息增益(information gain):表示得知特征X的信息而使得类Y的信息的不确定性减少的程度。
基尼指数(Gini index):随机森林使用“基尼指数”来选择划分属性。基尼指数越小,则数据集的纯度越高。基尼指数(Gini不纯度)表示在样本集合中一个随机选中的样本被分错的概率。
注意:Gini指数越小表示集合中被选中的样本被参错的概率越小,也就是说集合的纯度越高,反之,集合越不纯。当集合中所有样本为一个类时,基尼指数为0.
基尼指数在特征选择时常与信息增益(Information Gain)一起使用。基尼指数更适合处理多分类问题,而信息增益更适用于处理二分类问题。在构建决策树时,可以根据具体问题和数据集的特点选择合适的特征选择准则。
一些简单的剪枝算法包括损失函数(loss function)、代价函数(cost function)等。

20. 交叉熵

交叉熵(Cross-Entropy)是一种常用的损失函数,用于衡量两个概率分布之间的差异性。在机器学习和深度学习中,交叉熵常用于衡量模型预测结果与真实标签之间的差异,作为损失函数进行优化。
在分类任务中,假设有一个样本数据,真实标签表示为one-hot编码形式,表示为一个向量,其中正确类别对应的元素为1,其余类别对应的元素为0。模型的预测结果通常表示为类别的概率分布,也是一个向量,每个元素表示该样本属于对应类别的概率。
交叉熵损失函数的计算方式是将真实标签的one-hot编码和模型预测的概率分布进行比较,并计算它们之间的交叉熵。
交叉熵损失函数的特点是当模型的预测结果与真实标签完全一致时,交叉熵为0,否则大于0。因此,通过最小化交叉熵损失,可以使模型的预测结果尽可能接近真实标签,从而提高模型的性能。
在深度学习中,交叉熵损失函数通常与一些常用的优化算法(如梯度下降法)一起使用,通过反向传播算法来更新模型的参数,使交叉熵损失逐渐减小,从而提高模型的准确性和泛化能力。

21.epoch与batchsize

在机器学习和深度学习中,Epoch(迭代轮数)和Batch Size(批次大小)是训练模型时的两个重要概念。
Epoch(迭代轮数)表示整个训练数据集被完整地通过神经网络的次数。每个Epoch包含了对所有训练样本的一次前向传播和反向传播过程。通过增加Epoch的数量,可以使模型更多次地学习和更新权重,从而提高模型的性能。通常情况下,增加Epoch的数量可以提高模型的拟合能力,但也可能导致过拟合的问题。
Batch Size(批次大小)表示在每次参数更新时,所使用的训练样本的数量。数据集中的样本可以分成多个批次进行训练。在每个批次中,先进行前向传播和反向传播,然后更新模型的权重。较小的Batch Size可以提供更多的权重更新次数,使模型更频繁地进行参数更新,但会增加计算时间。较大的Batch Size可以加快训练速度,但可能导致模型无法充分学习到数据集的细节。
如果你有5000条训练数据,并且将Batch Size设置为32,那么每个Epoch会训练所有的数据。在这种情况下,一个Epoch会进行5000 / 32 = 156.25次参数更新。通常,对于不能整除的情况,最后一个不完整的Batch会被舍弃,所以你会得到156个完整的Batch。
在训练过程中,每个Batch会包含32个样本,模型会对这32个样本进行前向传播和反向传播,然后更新模型的权重。这个过程会重复进行,直到所有的Batch都被使用一次,也就是一个Epoch完成。
需要注意的是,在深度学习中,通常会将训练数据集进行随机打乱(shuffle),以避免模型对数据的顺序敏感。因此,在每个Epoch开始时,训练数据会被重新打乱,然后再按照Batch Size进行划分并进行训练。
总结起来,对于你的情况,每个Epoch会进行156次参数更新,每次更新会使用32个样本(Batch Size为32)。整个训练数据集会在一个Epoch内被使用一次。这样的训练过程将持续进行多个Epoch,直到达到预定的训练轮数或满足其他停止条件。
Softmax函数的作用是将原始分数映射到一个概率分布上,使得各个类别的概率之和为1。它将原始分数转化为概率的形式,用于表示每个类别的相对可能性。

21. softmax 与hardmax

Hardmax函数是对Softmax函数的一种变体,它将输出向量中概率最大的元素设置为1,其他元素设置为0。换句话说,Hardmax函数会选择概率最高的类别作为预测结果,而忽略其他类别。因此,Hardmax函数的输出是一个独热编码(one-hot encoding)形式的向量。
相比之下,Softmax函数会给出每个类别的概率分布,而Hardmax函数则给出最有可能的类别。
在神经网络中,Softmax函数通常用于多类别分类问题的输出层,它将模型的原始输出转化为表示各个类别概率的形式。而Hardmax函数在实际应用中较少使用,通常用于需要直接得到最可能类别的场景,例如评估模型的预测准确率等。

22. 梯度消失与爆炸

梯度消失是指在反向传播过程中,梯度逐渐变小并趋近于零,导致参数更新的幅度很小,使得网络无法有效地学习。这通常发生在使用具有饱和激活函数(如Sigmoid、Tanh)的网络中,当网络层数较多时,梯度会逐层地缩小,最终变得非常接近于零。
梯度爆炸是指在反向传播过程中,梯度逐渐变大并超过了一定阈值,导致参数更新的幅度很大,使得网络无法稳定地收敛。梯度爆炸通常发生在网络层数较多、参数初始化不当或学习率设置过大的情况下,导致梯度指数级增长。
为了解决梯度消失和梯度爆炸问题,可以采取以下方法:
使用适当的激活函数:选择合适的激活函数可以缓解梯度消失和爆炸问题。例如,使用ReLU(Rectified Linear Unit)等激活函数可以避免梯度消失,并且可以使用激活函数的变体(如Leaky ReLU、ELU)来进一步提高网络的性能。
使用残差连接:在深层网络中使用残差连接(Residual Connection)可以帮助信息在网络中更好地传递,减轻梯度消失问题,使用直接映射来连接网络不同层之间的思想。
批量归一化:批量归一化是一种常用的技术,通过对每个批次的输入进行归一化,可以减轻梯度消失和爆炸问题,并加速网络的训练过程。
使用良好的参数初始化策略:合适的参数初始化可以减轻梯度消失和爆炸问题。一种常用的方法是使用Xavier或He等初始化方法,确保参数在网络中传播时保持较为平衡的范围。
使用梯度剪裁:梯度剪裁是一种常用的技术,用于限制梯度的范围,防止梯度爆炸。通过设置一个梯度阈值,可以剪裁超过该阈值的梯度值,使其保持在可控范围内。
使用适当的优化器:优化器的选择也可以对梯度消失和爆炸问题产生影响。一些优化器,如Adam、RMSprop等,具有自适应的学习率调整机制,可以更好地应对梯度问题。

23. LSTM隐藏状态

在LSTM(长短期记忆)模型中,隐藏状态(hidden state)和输出之间有一定的关系。
隐藏状态是LSTM模型内部的一种状态变量,它在每个时间步都会更新。隐藏状态可以看作是模型对过去观察到的序列信息的编码表示。它包含了模型在当前时间步前面观察到的所有历史信息,并且会在后续时间步中被用作输入来影响模型的决策。
因此,隐藏状态和输出之间的关系是:隐藏状态通过门控单元的操作计算得到,而输出通常是基于最后一个时间步的隐藏状态进行计算得到的。隐藏状态可以看作是模型对序列信息的编码表示,而输出是模型的最终预测结果。
在LSTM(长短期记忆)模型中,隐藏状态(hidden state)和记忆单元(cell state)是两个关键的组成部分。
隐藏状态是LSTM模型在每个时间步的一个输出,它可以看作是模型对过去观察到的序列信息的编码表示。隐藏状态包含了模型在当前时间步之前观察到的所有历史信息,并且在后续时间步中会被用作输入来影响模型的决策。隐藏状态在LSTM模型中通过门控单元(Gate Unit)的操作计算得到,包括输入门(Input Gate)、遗忘门(Forget Gate)和输出门(Output Gate)的操作。
记忆单元是LSTM模型中用于存储和更新信息的一个关键组件。它是一个内部状态变量,用于记忆和传递过去时间步的相关信息。记忆单元可以看作是模型在每个时间步记住的“记忆”,并且可以选择性地遗忘或更新这些记忆。记忆单元的更新涉及到遗忘门、输入门和输出门的操作,这些门控机制允许模型在每个时间步决定记忆单元中存储的信息。
在LSTM模型中,隐藏状态和记忆单元之间存在一定的关系。具体来说,隐藏状态的计算涉及到记忆单元的更新过程,并且隐藏状态中包含了记忆单元的一部分信息。记忆单元的更新和选择性遗忘操作可以看作是在更新隐藏状态时对历史信息的处理过程。

24. LSTMP

LSTMP(具有投影的长短期记忆)模型,它是传统LSTM(长短期记忆)模型的扩展。
在标准的LSTM模型中,隐藏状态和细胞状态是基于输入和先前状态计算得出的,输出是根据隐藏状态生成的。然而,在某些情况下,将隐藏状态投影到低维空间然后生成输出可能会更有益
LSTMP在计算隐藏状态后引入了一个投影层,将隐藏状态映射到低维空间。这个投影层通常由一个全连接(密集)层和非线性激活函数组成。投影后的隐藏状态随后用于生成输出。 将输入数据从高维度投影到较低维度的表示,减少参数数量和计算量,
LSTMP中的投影层允许模型学习隐藏状态的更紧凑和表达性强的表示,可能提高LSTM网络的建模能力和效率。它还可以降低输出的维度,这在输出空间较大的情况下是有用的
总结起来,隐藏状态是LSTM模型的输出,用于编码序列信息。记忆单元是LSTM模型内部用于存储和更新信息的组件,它在计算隐藏状态时发挥重要作用。隐藏状态和记忆单元之间存在一定的关系,记忆单元的更新过程影响隐藏状态的计算结果。

25. GRU相比LSTM有什么不一样?

GRU(Gated Recurrent Unit)是一种与LSTM(Long Short-Term Memory)类似的循环神经网络(RNN)模型,用于处理序列数据。GRU与LSTM在解决序列建模任务时具有相似的能力,但它们在结构上有一些不同之处。
以下是GRU相对于LSTM的几个不同之处:
门控单元数量减少:LSTM中的门控单元包括输入门、遗忘门和输出门,而GRU中只有两个门控单元:更新门(Update Gate)和重置门(Reset Gate)。
内部状态的处理:LSTM中使用细胞状态(Cell State)也叫记忆单元来存储和传递信息,而GRU使用一个单一的状态向量(Hidden State)来完成类似的功能。GRU的隐藏状态不仅包含了过去的信息,还可以通过门控机制选择性地更新和传递信息。
门控机制的操作方式:GRU中的更新门类似于LSTM中的输入门和遗忘门的组合。它决定了是否将过去的隐藏状态与当前的输入结合在一起,这一步的操作就是忘记传递下来的上一个时间步的隐藏状态中的某些维度信息,并加入当前节点输入的某些维度信息。重置门控制着过去隐藏状态对当前隐藏状态的影响程度。

参数数量:相对于LSTM,GRU具有更少的参数,因为它减少了门控单元的数量。
由于参数较少和门控机制的简化,GRU相对于LSTM具有更简单的结构,并且在某些任务上可能具有更快的训练速度。然而,LSTM在某些复杂的序列建模任务上可能表现更好,因为它具有更多的门控单元,可以更精细地控制信息的流动和存储。选择使用GRU还是LSTM取决于具体的任务需求和数据特征。

RNN

RNN对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,什么是序列特性呢?我个人理解,就是符合时间顺序,逻辑顺序,或者其他顺序就叫序列特性
RNN之所以可以解决序列问题,是因为它可以记住每一时刻的信息,每一时刻的隐藏层不仅由该时刻的输入层决定,还由上一时刻的隐藏层决定,W其实是每个时间点之间的权重矩阵,值得注意的一点是,在整个训练过程中,每一时刻所用的都是同样的W。

26. GRU

GRU(Gated Recurrent Unit)是一种循环神经网络(RNN)模型,用于处理序列数据。它是一种比传统的RNN更加简化的变种,具有较少的参数和更简洁的结构。
GRU通过门控机制来控制信息的流动和存储,包括重置门(Reset Gate)和更新门(Update Gate)。
重置门(Reset Gate):重置门控制着上一个时间步的隐藏状态对当前隐藏状态的影响程度。它决定了在当前时间步中,过去隐藏状态对当前状态的有多少影响。将当前时刻的输入和上一时刻的隐藏状态传入重置门中,经过一系列的神经网络层和激活函数处理后得到重置门的输出,重置门的输出决定了旧记忆在当前时刻的保留比例。
更新门用于控制前一时刻的状态信息被带入到当前状态中的程度,也就是更新门帮助模型决定到底要将多少过去的信息传递到未来,简单来说就是用于更新记忆
更新门(Update Gate):更新门控制着过去隐藏状态和当前输入之间信息的更新程度。它决定了在当前时间步中,过去隐藏状态和当前输入有多少信息被传递到下一个时间步的隐藏状态中。更新门还充当了忘记门(Forget Gate)和输入门(Input Gate)的功能,它们在LSTM中是分开实现的。
通过这两个门控制机制,GRU可以选择性地更新和遗忘信息,以适应不同的序列模式。相比于LSTM,GRU减少了一个门控单元,因此具有更少的参数和更简单的结构。

27. 数据不平衡问题

重采样(Resampling):通过增加少数类样本或减少多数类样本,使得不同类别的样本数量达到平衡。常见的重采样方法包括过采样(Oversampling)和欠采样(Undersampling)。
过采样:通过复制少数类样本或生成新的少数类样本,使得少数类样本数量增加到与多数类样本接近。常用的过采样方法有随机过采样(Random Oversampling)和SMOTE(Synthetic Minority Over-sampling Technique)等。但过采样可能导致过拟合训练数据。
欠采样:通过删除多数类样本或减少多数类样本的数量,使得多数类样本数量减少到与少数类样本接近。常用的欠采样方法有随机欠采样(Random Undersampling)和集群中心欠采样(Cluster Centroids Undersampling)等。
类别权重调整(Class Weighting):通过为不同类别设置不同的权重,使得模型在训练过程中更关注少数类样本。常见的类别权重调整方法包括平衡权重(Balanced Weighting)和自定义权重。
数据合成(Data Synthesis):通过生成合成的少数类样本来增加少数类样本的数量。常见的数据合成方法包括基于生成模型的方法,如GAN(Generative Adversarial Network)等。

28. 知识蒸馏和量化压缩

知识蒸馏(Knowledge Distillation)和量化压缩(Quantization Compression)是用于模型压缩和优化的两种常见方法。
知识蒸馏:知识蒸馏是一种通过从一个复杂模型(通常称为教师模型)中提取知识,并将其传递给一个较简单的模型(通常称为学生模型)来提高学生模型性能的方法。教师模型通常具有更大的容量和复杂性,可以产生更准确的预测。通过使用教师模型的输出作为学生模型的目标,并结合额外的损失函数(如均方误差或交叉熵),学生模型可以学习到更多的信息和模式,从而在性能上接近或超过教师模型。知识蒸馏可以帮助减少模型的复杂性,提高推理速度,并在资源受限的环境中部署模型。
量化压缩:量化压缩是一种通过减少模型的表示精度来减少模型的存储需求和计算成本的方法。通常,神经网络模型中的权重和激活值是使用较高位数的浮点数表示的,而量化压缩将它们转换为较低位数的定点数或整数表示。例如,将权重从32位浮点数量化为8位定点数可以显著减少模型的存储空间,并在硬件上加速模型的计算。虽然量化压缩会引入一定的信息损失,但可以通过一些优化技术(如训练期间的量化感知训练)来减小性能下降,并在很大程度上保持模型的准确性。
这些方法都旨在减少深度学习模型的复杂性和资源消耗,使其更适合于在嵌入式设备、移动设备和边缘设备等资源受限的环境中使用。通过知识蒸馏和量化压缩,可以实现模型的高效部署和推理,同时保持相对较高的准确性。

29. ADAM、SGD

ADAM(Adaptive Moment Estimation)和 SGD(Stochastic Gradient Descent)都是常用的优化算法,用于更新神经网络中的参数以最小化损失函数。
SGD是一种基本的优化算法,它在每个训练样本上计算梯度并更新参数。SGD的更新公式如下:
参数 = 参数 - 学习率 * 梯度
SGD的主要优点是简单和易于实现,但其缺点是在训练过程中可能会收敛缓慢,并且容易陷入局部最优点。
ADAM是一种自适应学习率的优化算法,它结合了动量法和RMSProp算法的优点。ADAM的更新公式如下:
参数 = 参数 - 学习率 * (动量项 / 校正项)
ADAM使用了动量项来加速更新过程,并且根据历史梯度的平方根来自适应地调整学习率。这样可以在训练过程中更好地平衡速度和稳定性,使得模型更容易收敛到全局最优点。
相比于SGD,ADAM在训练过程中通常具有更快的收敛速度,能够更好地处理非平稳目标函数和不同尺度的参数。然而,ADAM也有一些缺点,例如对于小数据集可能存在过拟合的风险,并且对于超参数的选择较为敏感
综上所述,ADAM相比于SGD在实际应用中更为常用,因为它通常能够提供更好的训练效果和更快的收敛速度。但在某些情况下,SGD可能仍然是一种有效的选择,特别是在资源受限或数据集较小的情况下。
SGD原理:SGD(Stochastic Gradient Descent)是一种常用的优化算法,用于更新神经网络中的参数以最小化损失函数。它的原理可以简要描述如下:
1初始化参数:首先,需要初始化神经网络的参数,包括权重和偏置。通常可以使用随机初始化的方法来设置初始值。
2迭代更新:然后,对于每个训练样本,进行以下步骤:
a. 前向传播:将训练样本的输入通过神经网络进行前向传播,计算输出预测值。
b. 计算损失:将输出预测值与真实标签进行比较,计算损失函数的值。
c. 反向传播:通过反向传播算法计算损失函数对于网络参数的梯度。
d. 参数更新:使用梯度下降的思想,按照以下公式更新网络参数:
参数 = 参数 - 学习率 * 梯度
e. 重复步骤 a 到 d,直到遍历完所有的训练样本。
3迭代终止:重复迭代更新过程,直到达到预定义的停止条件,例如达到最大迭代次数或损失函数收敛等。
SGD的关键点是每次更新只使用一个样本的梯度来进行参数更新,而不是使用整个训练集的梯度。这样可以降低计算复杂度,并且可以在每次更新中更快地适应训练样本的特征。然而,由于每个样本的梯度计算可能存在噪声,SGD的更新过程可能会比较不稳定,导致收敛过程不够平滑。
Adam 算法和传统的随机梯度下降不同。随机梯度下降保持单一的学习率(即 alpha)更新所有的权重,学习率在训练过程中并不会改变。而 Adam 通过计算梯度的一阶矩估计和二阶矩估计而为不同的参数设计独立的自适应性学习率

29. 隐藏态与细胞态

在循环神经网络(RNN)中,隐藏状态(hidden state)和细胞状态(cell state)是两个关键的中间状态,尤其在长短期记忆网络(LSTM)中。
细胞状态是LSTM网络中引入的一种机制,用于解决梯度消失和梯度爆炸的问题,并增强模型对长期依赖关系的建模能力。它主要负责存储和传递信息。细胞状态可以看作是LSTM网络的长期记忆。
隐藏状态则是LSTM网络在每个时间步骤生成的中间表示,它主要用于存储模型对过去输入的记忆和处理信息的能力。隐藏状态可以看作是LSTM网络的短期记忆。
在LSTM中,细胞状态和隐藏状态之间通过一系列的门控单元进行交互和调节。这些门控单元包括遗忘门(forget gate)、输入门(input gate)和输出门(output gate)。这些门控单元根据当前输入、前一个隐藏状态和细胞状态来决定细胞状态的更新和传递。
具体来说,遗忘门决定了前一个细胞状态中哪些信息应该被遗忘,输入门决定了当前输入中哪些信息应该被纳入细胞状态,输出门决定了当前细胞状态中的信息如何被传递到下一个隐藏状态。
通过这种门控机制,LSTM网络能够在不同时间步骤之间灵活地存储和更新信息,并在处理序列数据时更好地捕捉长期依赖关系。
总结起来,细胞状态是LSTM网络的长期记忆,负责存储和传递信息;隐藏状态是LSTM网络的短期记忆,负责存储模型对过去输入的记忆和处理信息的能力。细胞状态和隐藏状态通过门控机制进行交互和调节,使LSTM网络能够更好地处理序列数据和长期依赖关系。

30. 注意力机制

注意力机制(Attention Mechanism)是一种用于增强模型对输入序列中不同部分的关注程度的技术。它在深度学习中被广泛应用于处理序列数据,如机器翻译、语音识别、图像描述生成等任务中。
Attention机制是一种在处理时序相关问题的时候常用的技术,主要用于处理序列数据。它核心思想是在处理序列数据时,网络应该更关注输入中的重要部分,而忽略不重要的部分,它通过学习不同部分的权重,将输入的序列中的重要部分显式地加权,从而使得模型可以更好地关注与输出有关的信息。
注意力机制通过引入可学习的权重,使模型能够动态地将注意力集中在输入序列的不同部分,从而在每个时间步上,对输入序列的不同部分进行加权求和,得到当前时间步的输出。这样就实现了模型对输入中不同部分的关注度的自适应调整,从而更好地捕捉关键信息
它的核心思想是根据当前任务的需要,在每个时间步骤上对输入序列中的不同位置进行加权组合,以生成模型的注意力表示。具体来说,注意力机制通常包括以下步骤:
输入编码:将输入序列(如文本、图像等)通过某种方式编码成固定长度的向量表示,例如使用循环神经网络(RNN)或卷积神经网络(CNN)。
查询生成:根据当前任务的上下文,生成一个查询向量(query),相似度用于衡量查询向量(通常是当前时间步的隐藏状态),表示模型当前关注的信息。
注意力权重计算:根据输入序列的编码表示和查询向量,计算每个输入位置的注意力权重(注意力机制计算序列中每个位置与查询向量(通常是当前时刻的隐藏状态或输出)之间的相似度,并将这些相似度转化为权重)。常用的计算方法包括点积注意力、加性注意力和缩放点积注意力等。
注意力加权:使用注意力权重对输入序列的编码表示进行加权求和,得到注意力加权表示。这表示模型对输入序列不同位置的关注程度。
输出生成:将注意力加权表示与模型的其他部分进行结合,生成最终的输出结果。
通过注意力机制,模型能够根据当前任务的需要自适应地关注输入序列中的重要部分,并将更多的注意力集中在那些对当前任务更有意义的信息上。这样可以提高模型的表达能力和性能
在注意力机制中,通常有三个主要的组成部分:
查询(Query):用于指定要查询的信息或位置。在自然语言处理任务中,查询通常是模型当前的隐状态或输出,用于寻找与之相关的输入部分
键(Key):表示输入序列中的每个元素的特征表示。键通常用于计算查询与输入序列中各个元素之间的相似性。
值(Value):与输入序列中的每个元素相关联的值。值可以是输入序列的特征表示,也可以是与每个元素相关的其他信息。
在使用注意力机制时,通常需要进行以下步骤:
计算注意力权重:通过计算查询与键之间的相似度,然后将相似度进行归一化,得到每个输入元素的注意力权重
加权求和:使用注意力权重对值进行加权求和,得到最终的注意力表示。这个加权求和过程可以使模型更关注与查询相关性高的输入部分。
输出:将注意力表示作为模型的输出,或与其他模块进行进一步的处理。
注意力机制的优点是可以在模型中引入更多的灵活性和可解释性。它允许模型自动地学习到输入序列中不同部分的重要性,并且可以在处理长序列时提供更好的性能。
深度学习中Attention与全连接层的区别何在?
注意力机制的意义是引入了权重函数f,使得权重与输入相关,从而避免了全连接层中权重固定的问题

31. 深度学习中的量化方法

在深度学习中,量化(Quantization)是指将浮点数参数和激活值转换为低位表示的过程。深度学习模型中的参数和激活值通常以浮点数形式存储,但这会导致模型的存储空间和计算需求很高。量化的目的是通过使用较少的位数来表示参数和激活值,以减少存储和计算的开销。
量化可以分为权重量化和激活值量化两个方面:
权重量化(Weight Quantization):将模型的权重参数转换为低位表示。例如,将32位浮点数的权重量化为8位整数。权重量化可以减少模型的存储空间,从而降低模型的内存占用和传输开销。
激活值量化(Activation Quantization):将模型的激活值转换为低位表示。通常,激活值在前向传播过程中会通过各个层级进行传递和计算,激活值量化可以减少计算过程中的数据位宽,从而加快计算速度。
固定点量化(Fixed-Point Quantization):将浮点数表示的权重和激活值转换为固定位宽的整数表示。例如,将32位浮点数的权重和激活值量化为8位整数。固定点量化可以通过缩小表示范围来减少存储需求和计算开销。
二值化(Binarization):将权重和激活值量化为二进制形式,即只有两个取值(+1和-1)的表示。二值化可以极大地减少存储需求和计算开销,但会损失一部分模型的表示能力。
等间隔量化(Uniform Quantization):将权重和激活值量化为等间隔的离散取值。例如,将权重和激活值量化为8位整数,取值范围在[-128, 127]之间。等间隔量化可以简单地将浮点数映射到离散的取值,但可能无法充分利用表示范围。
自适应量化(Adaptive Quantization):根据数据的分布和统计特性来自适应地选择量化的表示范围和位宽。自适应量化可以更好地适应不同数据的动态范围,提供更好的模型表示能力和精度。
混合精度量化(Mixed Precision Quantization):在模型中同时使用不同位宽的量化表示。例如,将某些层的权重和激活值量化为低位宽,而将其他层保持为高位宽。混合精度量化可以在保持模型精度的同时减少存储需求和计算开销。

32. 计算机的存储结构

计算机存储结构指的是计算机系统中用于存储数据和指令的各个层次和组成部分。计算机存储结构主要分为以下几个层次:
寄存器:寄存器是位于中央处理器(CPU)内部的最快速的存储器,用于存储临时数据和指令。它们位于CPU核心中,可以直接被CPU访问,具有极快的读写速度。寄存器的容量非常有限,通常以字(word)的形式表示,每个字可以存储一个数据或指令。
高速缓存(Cache):高速缓存是位于CPU和主存储器(RAM)之间的一层存储器层次结构。它用于存放近期使用的数据和指令,以加快CPU对数据的访问速度。高速缓存分为多个级别,从L1缓存到L2、L3缓存等,每个级别的容量逐渐增大但速度逐渐降低。
主存储器(Main Memory):主存储器是计算机中用于存储程序和数据的主要存储设备。它通常是随机访问存储器(RAM),具有较大的容量,但相对于寄存器和高速缓存,读写速度较慢。主存储器通过内存地址进行访问,数据可以随机读写。
辅助存储器(Secondary Storage):辅助存储器用于长期存储大量的数据和程序。它包括硬盘驱动器、固态硬盘(SSD)、光盘、磁带等设备,容量大且相对廉价,但访问速度比主存储器慢。辅助存储器常用于持久化数据存储,例如操作系统、应用程序和用户文件。

  • TensorFlow 中的主要操作被定义为传递值并将输出分配给另一个张量。
  • 牛顿法和拟牛顿法都是基于迭代更新的优化方法,梯度下降

33.什么是卷积?什么是池化?

卷积是一种特殊的线性操作,它通过将一个小的滤波器(也称为卷积核或局部感受野)应用于输入图像的不同位置来提取图像的局部特征。卷积操作的过程是将卷积核与图像对应位置的像素值相乘,然后将所有元素相加,形成一个新的特征图。通过滑动卷积核并在整个图像上重复这个过程,我们可以获得整个输入图像的特征图。
卷积操作在图像处理中具有以下优势:
参数共享:卷积核的参数在整个图像上共享,减少了需要学习的参数数量,节省了内存和计算资源。
局部感知:卷积核的大小决定了模型在图像上感知的局部区域大小,使模型更专注于图像的局部结构。
池化是CNN中的一种下采样操作,它的目的是减少特征图的尺寸,减少模型的复杂度,并且有助于防止过拟合。池化操作通过在特定区域内对特征进行聚合来实现。常见的池化方法有最大池化(Max Pooling)和平均池化(Average Pooling):
最大池化:在每个池化区域中选择最大的特征值作为输出。它能够保留最显著的特征,有助于提取图像中的纹理和边缘等信息。
平均池化:在每个池化区域内计算特征的平均值作为输出。平均池化相对于最大池化更加平滑,有助于保留图像中的整体趋势和一般性信息。

34.为什么不同的机器学习领域都可以使用CNN,CNN解决了这些领域的哪些共性问题?它是如何解决的?

参考回答:CNN的关键是卷积运算,卷积核与卷积输入层进行局部连接可以获取整个输入的局部特征信息或者说是每个输入特征的组合特征。所以CNN的本质是完成了特征提取或者说是对原始特征的特征组合工作,从而增加模型的表达能力。不同领域的机器学习都是通过数据的特征进行建模,从而解决该领域的问题。故CNN解决了不同领域的特征提取问题,所用的方法是基于局部连接/权值共享/池化操作/多层次结构。

35. CNN的特点以及优势?

参考回答:CNN具有许多独特的特点和优势,使其成为计算机视觉和其他领域中最受欢迎的深度学习模型之一。主要特点和优势可能包括以下几点:
局部感知性: CNN通过卷积操作对输入数据的局部区域进行感知和处理。这使得它能够提取图像、语音和自然语言等数据中的局部特征,从而更好地捕捉数据的结构和模式。
参数共享: CNN中的卷积核在整个输入数据上共享参数,这意味着对于相同的特征,无论在图像中的哪个位置,使用相同的卷积核进行处理。这种参数共享减少了需要学习的参数数量,节省了内存和计算资源,并使模型更具有泛化能力。
权值共享特指在给定一张图片后,仅用一个卷积核来对图片的每一个位置进行扫描读取,在卷积过程中权值参数始终保持不变,如此即可实现网络中参数数目的进一步缩小。此处需要注意,一组卷积核 F×F 的权值只能得到一张 Feature map,为更好的表示图像特征,需要使用不同的多组卷积核(过滤器)来使学得的图像特征更丰富。

稀疏连接: 在CNN中,卷积核通常只与输入数据的一小部分区域进行连接,即稀疏连接。这使得模型更加适合处理高维数据,如图像,而不会因为参数量的急剧增加而导致过拟合问题。
池化操作: 池化层是CNN中的重要组成部分,它能够减少特征图的尺寸并保留重要的特征信息。通过池化操作,模型能够更好地处理大规模数据,并且有助于防止过拟合问题。
平移不变性: 对于图像处理任务,目标通常不会因为其在图像中的位置发生变化而改变其身份。CNN通过卷积层的特性,使得模型对平移具有不变性,即对于目标在图像中的不同位置,能够产生相似的特征表示,从而增加了模型的鲁棒性
高性能: CNN在图像处理、语音识别、自然语言处理等领域表现出色。由于它的局部感知性和特征提取能力,CNN已成为图像分类、目标检测、人脸识别和语义分割等任务的首选模型。

36.CNN的权重共享是怎么做的?

参考回答:卷积神经网络(CNN)中的权重共享是一种技术,它允许在不同的位置使用相同的权重来进行卷积操作。这在图像处理中特别有用,因为图像的局部区域可能具有相似的特征。通过权重共享,可以显著减少需要学习的参数数量,从而降低计算成本并防止过拟合。在卷积层中,权重共享是通过使用同一组卷积核(卷积滤波器)来实现的。在卷积操作中,无论卷积核在输入图像的哪个位置,它的权重是相同的。这意味着,无论在图像的哪个区域执行卷积,卷积核的权重都不变。通过这种权重共享机制,卷积核可以在整个输入图像上滑动,识别相似的特征,而不需要为每个位置学习不同的权重。这有效地减少了需要训练的参数数量,并且对于图像中的局部模式识别非常有用。

37.CNN卷积层参数数量是怎么计算的?

参考回答:CNN卷积层的参数数量可以通过以下公式来计算:
参数数量 = (卷积核高度 × 卷积核宽度 × 输入通道数 + 1) × 输出通道数
其中:
卷积核高度和卷积核宽度是卷积核的尺寸,表示为像素数或特征图上的网格单元数。
输入通道数是输入数据的通道数,例如,在RGB图像中,通道数为3。
输出通道数是卷积层中使用的卷积核数量,也就是输出特征图的通道数。
最后的加1是考虑到每个卷积核还有一个偏置项。

38.卷积感受野相关、1×1卷积核

感受野(Receptive Field),指的是神经网络中神经元“看到的”输入区域,在卷积神经网络中,feature map上某个元素的计算受输入图像上某个区域的影响,这个区域即该元素的感受野。
每个卷积层都有这种规律,经过多层堆叠,总体感受野就会呈现高斯分布
1×1卷积核作用:
增加网络深度(增加非线性映射次数):首先直接从网络深度来理解,1x1 的卷积核虽小,但也是卷积核,加 1 层卷积,网络深度自然会增加。
1x1卷积核,可以在保持feature map尺度不变的(即不损失分辨率)的前提下大幅增加非线性特性(利用后接的非线性激活函数),把网络做的很深。并且1x1卷积核的卷积过程相当于全连接的计算过程,通过加入非线性激活函数,可以增加网络的非线性,使得网络可以表达更复杂的特征
升维降维: 由于 1×1 并不会改变 height 和 width,改变通道的第一个最直观的结果,就是可以将原本的数据量进行增加或者减少。这里看其他文章或者博客中都称之为升维、降维。
跨通道的信息交互
1x1卷积核只有一个参数,当它作用在多通道的feature map上时,相当于不同通道上的一个线性组合,实际上就是加起来再乘以一个系数,但是这样输出的feature map就是多个通道的整合信息了,能够使网络提取的特征更加丰富
使用1x1卷积核,实现降维和升维的操作其实就是 channel 间信息的线性组合变化。
比如:在尺寸 3x3,64通道个数的卷积核后面添加一个尺寸1x1,28通道个数的卷积核,就变成了尺寸3x3,28尺寸的卷积核。 原来的64个通道就可以理解为跨通道线性组合变成了28通道,这就是通道间的信息交互。
注意:只是在通道维度上做线性组合,W和H上是共享权值的滑动窗口。
1*1卷积替代全连接层:
用1×1卷积代替全连接应该是基于输入尺寸的考虑,全连接的输入是特征图所有元素乘以权重再求和,但是这个权重向量是在设计网络的时候就需要固定的,所以全连接没办法适应输入尺寸的变化只能固定。但是11卷积的输出与输入尺寸是一样大的,输出尺寸可以随着输入尺寸的变化而变化,所以11卷积无需固定输出尺寸。
当11卷积层的channel个数等于全连接层的节点个数时,可以看成全连接层,其中空间维度高和宽上的每个元素相当于样本,通道相当于特征。
用1
1卷积层代替全连接层的好处:
1、不改变图像空间结构
全连接层会破坏图像的空间结构,而1*1卷积层不会破坏图像的空间结构。
2、输入可以是任意尺寸
全连接层的输入尺寸是固定的,因为全连接层的参数个数取决于图像大小。而卷积层的输入尺寸是任意的,因为卷积核的参数个数与图像大小无关。

38.两个3×3卷积核与一个5×5卷积核

  1. 两个3×3计算量小, 计算量(乘加运算)=‘卷积次数’ x ‘参数量’,
    计算量:25*(x-4)(x-4) 第二种卷积核(33)2,其参数量为33+33=18个,卷积次数为(x-2平方+(x-2-2)平方次,临界值位10,特征图大小
  2. 增加非线性 堆叠含有小尺寸卷积核的卷积层来代替具有大尺寸的卷积核的卷积层,并且能够使得感受野大小不变,而且多个3x3的卷积核比一个大尺寸卷积核有更多的非线性(每个堆叠的卷积层中都包含激活函数),使得decision function更加具有判别性。

38.对应模型压缩方法有了解吗?

参考回答:我了解的有以下几种常用的模型压缩方法:
参数量削减: 通过减少模型中的参数数量来减小模型的尺寸。常见的方法包括剪枝,即移除冗余的权重;量化,将高精度的权重转换为低精度表示;矩阵分解,将权重矩阵分解为更小的矩阵等。
低秩近似: 将卷积层中的权重矩阵近似为低秩矩阵,以减少参数数量和计算量。
深度可分离卷积: 使用深度可分离卷积代替标准卷积操作,可以显著减少参数数量和计算量,同时保持较好的性能。
知识蒸馏: 将一个大型的教师模型的知识传递给一个小型的学生模型。通过学生模型学习教师模型的输出概率分布,可以提高学生模型的泛化性能,从而在小模型上实现高效运行。
在这里插入图片描述
知乎详解

39. 知识蒸馏

知识蒸馏是通过构建一个轻量化的小模型,利用性能更好的大模型的监督信息,来训练这个小模型,以期达到更好的性能和精度。
离线蒸馏: 离线蒸馏方式即为传统的知识蒸馏,如上图(a)。用户需要在已知数据集上面提前训练好一个teacher模型,然后在对student模型进行训练的时候,利用所获取的teacher模型进行监督训练来达到蒸馏的目的,而且这个teacher的训练精度要比student模型精度要高,差值越大,蒸馏效果也就越明显。一般来讲,teacher的模型参数在蒸馏训练的过程中保持不变,达到训练student模型的目的。蒸馏的损失函数distillation loss计算teacher和student之前输出预测值的差别,和student的loss加在一起作为整个训练loss,来进行梯度更新,最终得到一个更高性能和精度的student模型。

39. batchnorm如何工作也就是BN

Batch Normalization, 批标准化, 和普通的数据标准化类似, 批标准化就是针对每批数据训练后,对网络每层神经元的输出做标准化处理(将很离散的数据映射到0-1之间)。将数据规整到统一区间,减少数据的发散程度,降低网络的学习难度,其作用可以加快模型训练时的收敛速度,使得模型训练过程更加稳定,避免梯度爆炸或者梯度消失。并且起到一定的正则化作用,几乎代替了Dropout。

Batch Norm 只是插入在隐藏层和下一个隐藏层之间的另一个网络层。 它的工作是从第一个隐藏层获取输出并在将它们作为下一个隐藏层的输入传递之前对其进行标准化,通过计算该批次数据相关的均值与方差进行归一化,
训练时,均值、方差分别是该批次内数据相应维度的均值与方差;
推理时,均值、方差是基于所有批次的期望计算所得
BN 的主要思想就是:在每一层的每一批数据上进行归一化。我们可能会对输入数据进行归一化,但是经过该网络层的作用后,我们的数据已经不再是归一化的了。随着这种情况的发展,数据的偏差越来越大,我的反向传播需要考虑到这些大的偏差,这就迫使我们只能使用较小的学习率来防止梯度消失或者梯度爆炸。

30.混合精度训练

大多数的深度学习模型使用的是32位单精度浮点数(FP32)来进行训练,而混合精度训练的方法则通过16位浮点数(FP16)进行深度学习模型训练,从而减少了训练深度学习模型所需的内存,提高模型的训练速度。
16位精度可能出现的问题
数据溢出:们提到了 fp16 的有效的动态范围比单精度的float要狭窄很多。对于深度学习而言,最大的问题在于 Underflow(下溢出),在训练后期,例如激活函数的梯度会非常小, 甚至在梯度乘以学习率后,值会更加小,产生梯度消失的问题
float16 也极少出现下溢的情况。此外,在正向传递中出现下溢的情形更是十分罕见。但是,在反向传递中,梯度可能因下溢而变为零。损失放大就是一个防止出现下溢的技巧。
舍入误差:Rounding Error指示是当网络模型的反向梯度很小,一般FP32能够表示,但是转换到FP16会小于当前区间内的最小间隔,会导致数据溢出。
要解决半精度可能出现的问题,可以考虑以下策略
使用动态精度: 在训练过程中,可以根据需要动态调整精度。例如,可以在前向传播中使用半精度,而在梯度计算和权重更新时切换回单精度。
使用梯度缩放: 为了减轻梯度消失的问题,可以使用梯度缩放(gradient scaling)技术,通过在反向传播时对梯度进行缩放来保持数值稳定性。
使用梯度裁剪: 为了避免梯度爆炸,可以使用梯度裁剪(gradient clipping)技术,限制梯度的大小。

33. 分布式训练

分布式训练采用了同样的方式,即将训练任务按照一定方法拆分到多个计算节点进行计算,再按照一定的方法对拆分后计算得到的信息,一般是梯度信息或基于梯度更新后的参数信息,进行聚合。这个拆分可以采用多种不同的方式,一般被统称为“并行方式”,而信息聚合的方式可以称为“模型更新传递方式”
数据并行:在 数据并行 中,将样本数据进行切分,切分后的数据 被送至各个训练节点,与 完整的模型 进行运算,最后将多个节点的信息进行合并,以GPU的维度来看,数据并行简单来说就是在并行训练的设备上,对完整训练数据进行分片训练,同一个训练的时间间隔内,不同GPU设备上用各自分片的数据对模型进行训练,其后再进行模型梯度的汇总更新和各GPU间的状态同步。这样做的结果就是在一个训练的时间间隔内,各个GPU设备可以并行地用各自分片的数据进行模型训练,从而大大加速了整体模型的训练。
数据并行时,每个GPU设备上保持了同样的模型数据,且一次完整的训练过程包括以下3步:
1.CPU负责将不同的训练数据(mini-batch)分别喂给GPU0和GPU1设备;
2.不同的显卡设备上存储了完全一致的模型,通过mini-batch数据进行了前向和反向传播;
3.位于不同GPU设备上的模型进行权重同步和更新,这一个梯度同步过程是用一个Allreduce sum同步通信操作实现的,对梯度使用Allreduce sum操作后每个进程上得到的梯度是相同的,这时候的梯度值等于所有进程上梯度对应位置相加的和,然后每个进程用Allreduce后的梯度和除以数据并行中的进程数,这样得到的梯度是同步之前所有进程上梯度的平均值。
模型并行::在 模型并行 中,将模型进行切分,完整的数据 被送至各个训练节点,与 切分后的模型 进行运算,最后将多个节点的运算结果合并,
从上图可知,模型并行时,完整的模型网络切分到了不同设备:GPU0和GPU1,且训练过程分为如下几步:
1.mini-batch喂送给GPU0;
2.数据在GPU0所在网络上进行前向过程;
3.上一步的数据继续喂给GPU1并在GPU1的网络上继续进行前向;
4.GPU1进行反向;
5.反向数据回传给GPU0,继续进行反向; 可见,模型并行时,并不需要进行各个设备上模型权重参数的同步更新,而是会有中间数据在各个GPU上的模型之间流动。

34. transformer

Transformer一种神经网络架构 ,仅仅依赖于注意力机制就可处理序列数据,从而摈弃了 RNN 或 CNN。
Transformer 的核心思想是自注意力机制(Self-Attention),能够捕捉输入序列中不同位置的关系,使其在处理序列数据时表现出色。
以下是Transformer架构的主要组成部分:
自注意力机制(Self-Attention): 自注意力允许每个位置的词语(或输入)与其他位置的词语建立联系,通过计算每个位置与其他位置的关联权重,从而捕捉到不同词语之间的依赖关系。这使得Transformer可以同时处理不同位置之间的信息。
多头注意力(Multi-Head Attention): 为了更好地捕捉不同语义层次的关系,Transformer中的自注意力机制被扩展为多个头(Head)。每个头会学习不同的注意力权重,然后这些头的输出会被拼接并映射到输出空间。
位置编码(Positional Encoding): 由于Transformer没有显式的顺序信息,位置编码被引入以将序列中的每个位置与实际位置关联起来,从而使模型能够处理序列信息
编码器-解码器架构: 在机器翻译等任务中,Transformer通常使用编码器-解码器架构。编码器将输入序列编码为一系列的隐藏表示,解码器根据编码器的输出和之前生成的内容来生成输出序列。
残差连接和层归一化: Transformer网络中广泛使用残差连接和层归一化来加速训练,减轻梯度消失问题,并稳定训练过程。
前馈神经网络(Feedforward Neural Network): Transformer的每个位置都连接到前馈神经网络中,以进一步对位置的表示进行非线性映射。

35. 残差网络ResNet

ResNet(Residual Neural Network)是一种通过引入残差连接来解决深度神经网络训练问题的架构。
ResNet的核心思想是通过添加“残差块”(residual block)来训练更深的神经网络,其中每个残差块包含了跳跃连接,允许网络直接传递某些层的信息,从而解决了梯度消失和训练困难问题。
一个标准的残差块通常由以下几个步骤组成:
输入分支(Identity Mapping): 输入特征经过一个卷积层和激活函数(如ReLU)后,传递给后续的操作。
残差分支(Residual Mapping): 输入特征经过一系列卷积层和非线性激活函数,构成了“残差映射”。
合并(Merge): 输入分支的输出和残差分支的输出进行元素级别的相加。
激活函数: 最终的输出通过一个激活函数(例如ReLU)进行激活,得到最终的残差块输出。
这种结构使得模型能够学习残差信息,即输入与期望输出之间的差异,而不是直接学习输出。这种差异更容易优化,因为相对于直接优化输出,优化残差更接近于优化线性变换。这有助于避免梯度消失问题,使网络更容易训练。

36. 数据清洗

数据清洗的方法
常用的数据清洗方法有
1.处理缺失值
对数据集中缺少数据的样本,可以采取删除,填充,归纳等方式进行缺失值处理。
2.处理异常值
对数据集中明显异常的数据,进行删除,替换,统计等方法处理。
3.处理重复值
对于数据重复的样本,采取删除,标记的方法。
4.数据格式类型转换
将数据转换为正确的数据类型,经常使用的就是时间日期数字等。
5.数据归一化
将数据标准化为具有相同量纲和相对大小关系的数据集。
6.数据特征
选择最相关的特征,减少冗余和噪声。
7.数据采样和平衡
对于样本不均衡的数据,可以采取欠采样、过采样或合成采样等方法来调整样本比例。也可以通过调整类别权重来平衡样本,使各类别的样本在模型训练中具有相似的重要性。

36 图像变换

空域与频域、几何变换、色度变换、尺度变换)
几何变换:图像平移、旋转、镜像、转置;
尺度变换:图像缩放、插值算法(最近邻插值、线性插值、双三次插值);
空间域与频域间变换:由于图像阵列很大,直接在空间域中进行处理,涉及计算量很大。因此,有时候需要将空间域变换到频域进行处理。例如:傅立叶变换、沃尔什变换、离散余弦变换等间接处理技术,将空间域的处理转换为频域处理,不仅可减少计算量,而且可获得更有效的处理(如傅立叶变换可在频域中进行数字滤波处理)。
图像的频率是表征图像中灰度变化剧烈程度的指标,是灰度在平面空间上的梯度

去噪

算术均值滤波:算术均值滤波用像素邻域的平均灰度来代替像素值,适用于脉冲噪声,因为脉冲噪声的灰度级一般与周围像素的灰度级不相关,而且亮度高出其他像素许多。可以通过设定阈值,比较噪声和邻域像素灰度,只有当差值超过一定阈值时,才被认为是噪声。
高斯滤波:高斯滤波器用像素邻域的加权均值来代替该点的像素值,而每一邻域像素点权值是随该点与中心点的距离单调增减的.这一性质是很重要的,因为边缘是一种图像局部特征,如果平滑运算对离算子中心很远的像素点仍然有很大作用,则平滑运算会使图像失真,因此缺点是权重完全取决于图像像素之间欧氏距离,与图像的内容没有关系。
中值滤波首先确定一个滤波窗口及位置(通常含有奇数个像素),然后将窗口内的像素值按灰度大小进行排序,最后取其中位数代替原窗口中心的像素值,中值滤波适用于椒盐噪声和脉冲噪声。因为对于受脉冲噪声和椒盐噪声污染的图像,相应位置的图像灰度发生了跳变,是不连续的,而此处的中值滤波正是一种非线性滤波方法,对这些类型的随机噪声,它比相同尺寸的线性平滑滤波器引起的模糊更少,能较好的保持边缘,但会使图像中的小目标丢失,因此对点、线和尖顶多的图像不宜采用中值滤波。

35 滤波

图像梯度即当前所在像素点对于X轴、Y轴的偏导数,所以梯度在图像处理领域我们可以也理解为像素灰度值变化的速度,用于计算梯度偏导数的滤波器模板,通常称之为梯度算子、边缘算子和边缘检测子等。
滤波的目的主要两个:
1.通过滤波来提取图像特征,简化图像所带的信息作为后续其它的图像处理
2.为适应图像处理的需求,通过滤波消除图像数字化时所混入的噪声滤波可理解为滤波器(通常为33、55矩阵)在图像上进行从上到下,从左到右的遍历,计算滤波器与对应像素的值并根据滤波目的进行数值计算返回值到当前像素点,如图 2-3所示,蓝色块表示滤波器,对图像进行点积运算并赋值到图像

36. 边缘检测

边缘检测本质上就是一种滤波算法,区别在于滤波器的选择,滤波的规则是完全一致的
它的主要原理在于识别出数字图像中那些颜色变化或者亮度变化明显的像素点,这些像素点的显著性变化往往代表图像的这部分属性发生了重要变化,其中包括了深度上的不连续、方向上的不连续及亮度上的不连续等。目前常用的边缘检测模型有很多:一阶的有Roberts算子,Prewitt算子,Sobel算子,Canny算子等;二阶的有Laplacian算子等。图像的边缘检测是基于图像的梯度来实现的,而获得图像的梯度就转化成使用各种算子对图像进行卷积运算来获得的。因此图像的边缘检测算法的核心在于算子。
1.滤波器的大小应该是奇数,这样才有一个中心点可进行赋值操作,常见的滤波器或卷积核(Conv kernel)有33、55等,因此也有了半径的概念,例如5*5的卷积核的半径为2
2.滤波器中所有元素之和应为0,这一限制条件是保证滤波前后图像总体灰度值不变
3.Roberts算子、Sobel算子、Prewitt算子运算速率高,对噪声也有一定抑制作用,但检测出的边缘质量不高,如边缘较粗、定位不准、间断点多
4.Canny算子不容易受噪声干扰,得到的边缘精细且准确,缺点就是运算代价较高,运行于实时图像处理较困难,适用于高精度要求的应用
5.Marr-Hildreth算子边缘检测效果相对较优,但对于噪声比较敏感(因其二阶运算的性质)

36. 图像分割

所谓图像分割是指根据灰度、彩色、空间纹理、几何形状等特征把图像划分成若干个互不相交的区域,使得这些特征在同一区域内表现出一致性或相似性,而在不同区域间表现出明显的不同。简单的说就是在一副图像中,把目标从背景中分离出来

  1. 基于阈值的分割方法:值法的基本思想是基于图像的灰度特征来计算一个或多个灰度阈值,并将图像中每个像素的灰度值与阈值作比较,最后将像素根据比较结果分到合适的类别中。因此,该方法最为关键的一步就是按照某个准则函数来求解最佳灰度阈值。阈值法特别适用于目标和背景占据不同灰度级范围的图。
    阀值分割方法的优缺点:
    计算简单,效率较高;
    只考虑像素点灰度值本身的特征,一般不考虑空间特征,因此对噪声比较敏感,鲁棒性不高。
  2. 基于区域的图像分割方法
    基于区域的分割方法是以直接寻找区域为基础的分割技术,基于区域提取方法有两种基本形式:一种是区域生长,从单个像素出发,逐步合并以形成所需要的分割区域;另一种是从全局出发,逐步切割至所需的分割区域。
  3. 基于边缘检测的分割方法
    缺点:不能保证边缘的连续性和封闭性;
    在高细节区域存在大量的碎边缘,难以形成一个大区域,但是又不宜将高细节区域分成小碎片;
    由于上述的(两个难点,边缘检测只能产生边缘点,而非完整意义上的图像分割过程。这也就是说,在边缘点信息获取到之后还需要后续的处理或者其他相关算法相结合才能完成分割任务。
  4. Hough变换(直线检测、圆检测);霍夫变换是拟合的一种策略,通过将图像空间的坐标变换到参数空间来实现直线和曲线的拟合。

37. 图像增强

目的在于通过对图像进行加工使其比原始图像更适合于特定应用,即图像灰度增强是根据特定需要有目的进行。
传统的图像灰度增强方法可分为空域法和频域法两大类。空域法图像灰度增强直接对图像中像素灰度值进行运算处理,如线性灰度变换、非线性灰度变换、直方图均衡化处理等。频域法图像灰度增强首先对图像进行频域变换,然后对各频谱成分进行相应操作,最后经过频域逆变换获得所需结果。

图像中的边缘和噪声都对应着图像傅里叶变换中的高频部分,所以,在频率域中,通过滤波器转移函数衰减图像的高频信息,而使低频信息畅通无阻地保留下来的过程称为低通滤波器。低通滤波器抑制了反应图像边界特征的高频信息以及包括在高频中的孤立点噪声,起到平滑图像去噪声的增强作用
高通滤波器是为了衰减或抑制低频分量,而保留高频分量的滤波形式。因为边缘及灰度急剧变化部分与高频分量相关联,在频率域中进行高通滤波将使图像得到锐化处理

37.多标签分类

图像处理:
在训练阶段,首先,将图像大小调整为 512×512,然后随机裁剪图像为 448×448,并对剪裁后得图像进行随机水平翻转。
模型训练的初始学习率设置为 0.001,并且在每 30 个周期降低为之前的 1/10,动量为 0.9,权重衰减为 0.0005,并使用随机梯度下降算法优化本文方法。由于 GPU内存的限制,批量大小设置为 24。在测试阶段,只需将图像大小调整为 448×448。
卷积神经网络模型参数的训练需要丰富的数据集,为了更好地提升网络模型的效果且防止模型过拟合,常用的方法是利用数据增强的方式,获得更多的图片样本,丰富数据集数据。常用的数据增强方法有:随机剪裁、随机翻转、随机设置图片的亮度和对比度以及对数据进行标准化等。
损失函数:对预测输出的每个标签和对应的真实标签计算交叉熵损失,然后求所有标签的交叉熵平均值。
模型评估指标:网页
绝对匹配率:标签必须全部预测准确才可
准确度:通过计算每个样本预测正确的标签数在真实标签中的比例,然后计算所有样本的平均准确度
缺陷:未考虑标签之间的关联性
为了衡量某个标签特征信息和其他标签之间的关联程度,我们可以通过特征加权的形式来决定其余标签对于当前标签类别的关联性,具体而言,如果某个标签类别和当前标签之间存在较强的语义关联性,则分配一个较大的影响权重,反之则分配一个较小的影响权重
为衡量复杂图像多个标签之间的语义关联性我们需要预先解决一个问题,即如何在通用卷积网络里在一定程度上尽可能的分离图像中的语义信息,在上一章我们提出了一个注意力机制模块注意到此模块可在一定的程度上在卷积特征维度上获得图像标签类别和特征图通道的对应关系。
改进:使用注意力机制将特征图的通道和数据集中的类别相对应,这意味着不同的特征图通道能够去注意不同的类别。然后利用卷积学习标签之间的语义关联,

38 准确率、精确率、召回率、F1

准确率:准确率是分类正确的样本占总样本个数的比例
精确率:精确率指模型预测为正的样本中实际也为正的样本占被预测为正的样本的比例
召回率:召回率指实际为正的样本中被预测为正的样本所占实际为正的样本的比例。
F1:F1 score是精确率和召回率的调和平均值, Precision体现了模型对负样本的区分能力,Precision越高,模型对负样本的区分能力越强;Recall体现了模型对正样本的识别能力,Recall越高,模型对正样本的识别能力越强。F1 score是两者的综合,F1 score越高,说明模型越稳健。
P-R曲线
评价一个模型的好坏,不能仅靠精确率或者召回率,最好构建多组精确率和召回率,绘制出模型的P-R曲线。
下面说一下P-R曲线的绘制方法。P-R曲线的横轴是召回率,纵轴是精确率。P-R曲线上的一个点代表着,在某一阈值下,模型将大于该阈值的结果判定为正样本,小于该阈值的结果判定为负样本,此时返回结果对应的召回率和精确率。整条P-R曲线是通过将阈值从高到低移动而生成的。原点附近代表当阈值最大时模型的精确率和召回率。

  1. 悉模型压缩加速的最新研究和技术进展,包括但不限于模型量化、结构压缩、剪枝、知识蒸馏等,以及TensorRT等inference框架优先;
    4、熟悉分类、检测、分割等常见视觉任务模型和算法优先;
    熟悉完整的ISP图像处理流程,在ISP某一模块有深入的研究,包括但不限于:2D/3D降噪、边缘增强、对比度增强、宽动态增强等常用的图像处理算法;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/837628.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python SMTP发送邮件时如何设置邮件地址?

Python SMTP发送邮件如何添加附件&#xff1f;如何使用SMTP发信&#xff1f; Python则通过其内置的smtplib模块和email模块为我们提供了实现这一功能的工具。在发送邮件的过程中&#xff0c;正确设置邮件地址是至关重要的&#xff0c;AokSend就来详细探讨一下如何在Python SMT…

Python专题:十三、日期和时间(1)

Python 日期和时间处理模块 模块就是别人写好的代码&#xff0c;通过将模块引入到代码里&#xff0c;使用已经实现好的功能 math模块&#xff0c;import模块名 time模块 时间戳&#xff1a;从公元1970年1月1日0点0分0秒起&#xff0c;到现在总共经历过的秒杀

odoo16 银行对账单导入改造

解决问题: odoo原生功能的话 是不能在系统上临时处理文件内容的&#xff0c;只会提示文件内容格式不对。 原始文件格式 在头部与尾部 格式问题&#xff0c;例如csv文件和 C53 文件&#xff0c;做一个前置弹框处理数据之后再导入 camt效果: csv效果:

汇聚荣电商:拼多多开店需要多少费用?

想要在拼多多这个巨大的电商平台上开一家属于自己的店铺&#xff0c;很多创业者都会关心一个问题&#xff1a;开店需要多少费用?答案并不复杂&#xff0c;但背后的经营哲学和策略却值得深究。接下来&#xff0c;让我们从四个不同的方面来详细探讨这个问题。 一、开店成本分析 …

GPT-4o,AI实时视频通话丝滑如人类,Plus功能免费可用

不开玩笑&#xff0c;电影《她》真的来了。 OpenAI最新旗舰大模型GPT-4o&#xff0c;不仅免费可用&#xff0c;能力更是横跨听、看、说&#xff0c;丝滑流畅毫无延迟&#xff0c;就像在打一个视频电话。 现场直播的效果更是炸裂&#xff1a; 它能感受到你的呼吸节奏&#xf…

10G UDP协议栈 IP层设计-(6)IP TX模块

一、模块功能 1、上层数据封装IP报文头部 2、计算首部校验和 二、首部校验和计算方法 在发送方&#xff0c;先把IP数据报首部划分为许多16位字的序列&#xff0c;并把检验和字段置零。用反码算术运算把所有16位字相加后&#xff0c;将得到的和的反码写入检验和字段。接收方收…

C++(week2):C语言中高级

文章目录 (八) 指针0.概念1.指针基础(1)指针的声明(2)指针的两个基本操作①取地址运算符 &②解引用运算符 * (3)野指针①野指针②空指针③指针变量的赋值 vs 指针变量指向对象的赋值 (4)指针的应用①指针作为参数进行传递②指针作为返回值③拓展&#xff1a;栈帧 (5)常量指…

手撸XXL-JOB(一)——定时任务的执行

SpringBoot执行定时任务 对于定时任务的执行&#xff0c;SpringBoot提供了三种创建方式&#xff1a; 1&#xff09;基于注解(Scheduled) 2&#xff09;基于接口&#xff08;SchedulingConfigurer&#xff09; 3&#xff09;基于注解设定多线程定时任务 基于Scheduled注解 首…

基于51单片机的冰箱控制系统设计( proteus仿真+程序+设计报告+原理图+讲解视频)

基于51单片机冰箱控制系统设计( proteus仿真程序设计报告原理图讲解视频&#xff09; 基于51单片机冰箱控制系统设计 1. 主要功能&#xff1a;2. 讲解视频&#xff1a;3. 仿真4. 程序代码5. 设计报告6. 原理图7. 设计资料内容清单&&下载链接资料下载链接&#xff1a; …

【C++】学习笔记——继承_2

文章目录 十二、继承5. 继承与友元6. 继承与静态成员7. 复杂的菱形继承及菱形虚拟继承 未完待续 十二、继承 5. 继承与友元 友元关系不能继承&#xff0c;也就是说父类友元不能访问子类私有和保护成员 。除非子类也设置成友元。 6. 继承与静态成员 父类定义了 static 静态成…

pnpm:无法加载文件 C:\Users\PC\AppData\Roaming\npm\pnpm.ps1,因为在此系统上禁止运行脚本。

使用pnpm命令启动vue时报了个错&#xff1a; 解决起来也简单&#xff0c;右击开始菜单&#xff0c;用管理员身份打开终端。win11的如下图&#xff1a; win10我记得应该是PowerShell&#xff08;管理员&#xff09;&#xff0c;这样的。 打开之后执行命令&#xff1a; set-…

物联网平台之单体架构

介绍本文主要介绍平台的单体架构&#xff0c;包括各个组件之间的数据流描述以及所做的一些架构选择。在单体架构模式下&#xff0c;所有 ThingsKit 组件都在单个 Java 虚拟机 (JVM) 中启动&#xff0c;并共享相同的操作系统资源。由于 ThingsKit 是用 Java 编写的&#xff0c;因…

dnf手游攻略,新手入坑必备!

一、角色创建策略 在DNF手游中&#xff0c;角色创建是玩家初入游戏的首要步骤。为最大化游戏体验和收益&#xff0c;新手玩家通常建议创建三个角色&#xff1a;一个主账号和两个副账号。 主账号选择 主账号的选择应基于玩家个人的喜好和对职业的熟悉程度。无论选择哪个职业&a…

番外篇 | 手把手教你利用YOLOv8进行热力图可视化 | 针对视频

前言:Hello大家好,我是小哥谈。YOLOv8的热力图可视化可以帮助我们更加直观地了解模型在图像中的检测情况,同时也可以帮助我们进行模型的调试和优化。热力图是一种颜色渐变的图像,不同颜色的区域表示不同程度的关注度或者置信度。在YOLOv8中,可以通过设置阈值来控制热力图的…

电机控制杂谈——“双采样双更新模式”对模型预测控制/PI控制的提升有多大?

1.采样频率与PWM开关频率的关系 一般有以下两种采样模式。 如下图&#xff08;a&#xff09;所示&#xff0c;这种方式称之为单采单更模式&#xff0c;即在一个PWM周期内&#xff0c;采样一次&#xff0c;更新一次PWM占空比&#xff0c;在这种情况下&#xff0c;采样频率&…

小红书自动私信获客,打造个人品牌

在当今这个内容为王、社交至上的时代&#xff0c;小红书作为新兴的社交电商平台&#xff0c;凭借其独特的社区氛围和强大的种草能力&#xff0c;成为了众多KOL、商家以及个人品牌打造的首选平台。想要在小红书上脱颖而出&#xff0c;精准引流获客&#xff0c;利用自动私信功能不…

【MyBatis】 MyBatis框架下的高效数据操作:深入理解增删查改(CRUD)

文章目录 1. 环境准备2. 增加数据&#xff08;Create&#xff09;3. 查询数据&#xff08;Retrieve&#xff09;4. 更新数据&#xff08;Update&#xff09;5. 删除数据&#xff08;Delete&#xff09;6. 总结 &#x1f389;欢迎来到Java学习路线专栏~探索Java中的静态变量与实…

强化训练:day8(求最小公倍数、数组中的最⻓连续⼦序列、字⺟收集)

文章目录 前言1. 最小公倍数1.1 题目描述1.2 解题思路1.3 代码实现 2. 数组中的最⻓连续⼦序列2.1 题目描述2.2 解题思路2.3 代码实现 3. 字母收集3.1 题目描述3.2 解题思路3.3 代码实现 总结 前言 1. 最小公倍数   2. 数组中的最⻓连续⼦序列   3. 字⺟收集 1. 最小公倍数…

JavaEE之线程(5)——Java内存模型、内存可见性、volatile关键字

前言 volatile可以理解成轻量级的 synchronized&#xff0c; 它在多CPU开发中保证了共享变量的“可见性”&#xff0c;可见性我们可以理解成是&#xff1a;当一个线程修改一个共享变量时&#xff0c;另一个线程可以读到这个修改的值。由于它不会引起线程的上下文切换和调度&am…

HTML的使用(中)

文章目录 前言一、HTML表单是什么&#xff1f;二、HTML表单的使用 &#xff08;1&#xff09;<form>...</form>表单标记&#xff08;2&#xff09;<input>表单输入标记总结 前言 在许多网页平台上浏览&#xff0c;大多逃不了登录账号。此时在网页中填写的用户…