自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小鹏AI

AI技术分享

  • 博客(355)
  • 资源 (1)
  • 问答 (1)
  • 收藏
  • 关注

原创 C语言 深度探究C语言中的预处理器

C 语言提供一些预定义的宏,可以直接使用。__DATE__:编译日期,格式为“Mmm dd yyyy”的字符串(比如 Nov 23 2021)。__TIME__:编译时间,格式为“hh:mm:ss”。__FILE__:当前文件名。__LINE__:当前行号。__func__:当前正在执行的函数名。该预定义宏必须在函数作用域使用。__STDC__:如果被设为1,表示当前编译器遵循 C 标准。:如果被设为1,表示当前编译器可以提供完整的标准库;否则被设为0(嵌入式系统的标准库常常是不完整的)。

2022-11-29 00:39:57 552

原创 C语言 深度探究C语言中的多文件项目

一个软件项目往往包含多个源码文件,编译时需要将这些文件一起编译,生成一个可执行文件。假定一个项目有两个源码文件foo.c和bar.c,其中foo.c是主文件,bar.c是库文件。所谓“主文件”,就是包含了main()函数的项目入口文件,里面会引用库文件定义的各种函数。上面代码中,主文件foo.c调用了函数add(),这个函数是在库文件bar.c里面定义的。现在,将这两个文件一起编译。上面命令中,gcc 的-o参数指定生成的二进制可执行文件的文件名,本例是foo。

2022-11-29 00:38:39 681

原创 C语言 深度探究C语言中的多字节字符

C 语言诞生时,只考虑了英语字符,使用7位的 ASCII 码表示所有字符。ASCII 码的范围是0到127,也就是最多只能表示100多个字符,用一个字节就可以表示,所以char类型只占用一个字节。但是,如果处理非英语字符,一个字节就不够了,单单是中文,就至少有几万个字符,字符集就势必使用多个字节表示。最初,不同国家有自己的字符编码方式,这样不便于多种字符的混用。因此,后来就逐渐统一到 Unicode 编码,将所有字符放入一个字符集。

2022-11-29 00:37:25 884

原创 C语言 深度探究C语言中的内存管理

C 语言的内存管理,分成两部分。一部分是系统管理的,另一部分是用户手动管理的。系统管理的内存,主要是函数内部的变量(局部变量)。这部分变量在函数运行时进入内存,函数运行结束后自动从内存卸载。这些变量存放的区域称为”栈“(stack),”栈“所在的内存是系统自动管理的。用户手动管理的内存,主要是程序运行的整个过程中都存在的变量(全局变量),这些变量需要用户手动从内存释放。如果使用后忘记释放,它就一直占用内存,直到程序退出,这种情况称为”内存泄漏“(memory leak)。

2022-11-29 00:36:02 200

原创 C语言 深度探究C语言中的I/O

C 语言提供了一些函数,用于与外部设备通信,称为输入输出函数,简称 I/O 函数。输入(import)指的是获取外部数据,输出(export)指的是向外部传递数据。

2022-11-29 00:34:40 1191 1

原创 C语言 深度探究C语言中的函数

函数是一段可以重复执行的代码。它可以接受不同的参数,完成对应的操作。下面的例子就是一个函数。上面的代码声明了一个函数plus_one()。函数声明的语法有以下几点,需要注意。(1)返回值类型。函数声明时,首先需要给出返回值的类型,上例是int,表示函数plus_one()返回一个整数。(2)参数。函数名后面的圆括号里面,需要声明参数的类型和参数名,表示这个函数有一个整数参数n。(3)函数体。函数体要写在大括号里面,后面(即大括号外面)不需要加分号。

2022-11-29 00:32:31 617 1

原创 C语言 深度探究C语言中的控制流

C 语言的程序是顺序执行,即先执行前面的语句,再执行后面的语句。开发者如果想要控制程序执行的流程,就必须使用流程控制的语法结构,主要是条件执行和循环执行。

2022-11-29 00:31:29 188

原创 C语言 深入探究C语言中的文件操作

本章介绍 C 语言如何操作文件。

2022-11-29 00:30:24 1040

原创 C语言 深度探究C语言中的命令行环境

程序内部怎么拿到命令行参数呢?这两个参数的名字可以任意取,但是一般来说,约定俗成就是使用这两个词。是一个数组,保存了所有的命令行输入,它的每个成员是一个字符串指针。由于字符串指针可以看成是字符数组,所以下面三种写法是等价的。是命令行参数的数量,由于程序名也被计算在内,所以严格地说。的每个成员,一旦移到空指针 NULL,就表示遍历结束。就会报错,这样就限定了程序必须有两个参数,才能运行。,就表示上一条命令运行成功,否则就是运行失败。语句,那么结束运行的时候,默认会添加一句。的地址是固定的,不能执行自增运算(

2022-11-28 23:49:08 319

原创 C语言 深度探究C语言中的数组

由于数组名就是一个指针,如果只传数组名,那么函数只知道数组开始的地址,不知道结束的地址,所以才需要把数组长度也一起传入。反过来,通过数组的减法,可以知道两个地址之间有多少个数组成员,请看下面的例子,自己实现一个计算数组长度的函数。上面示例中,将某个数组成员的地址,减去数组起始地址,就可以知道,当前成员与起始地址之间有多少个成员。声明数组时,编译器自动为数组分配了内存地址,这个地址与数组名是绑定的,不可更改,下面的代码会报错。省略成员数量时,如果同时采用指定位置的赋值,那么数组长度将是最大的指定位置再加1。

2022-11-28 23:43:18 1301

原创 《统计学习方法》 第二十二章 无监督学习方法总结

马尔可夫链蒙特卡罗法(CMC,包括 Metropolis-Hastings-算法和吉布斯抽样)、潜在狄利克雷分配(LDA)、 PageRank算法。即非负矩阵分解(NMF)变分推理、幂法。这些方法通常用于无监督学习的聚类、降维、话题分析以及图分析。聚类方法(包括层次聚类与k均值聚类)、奇异值分解(SVD)、主成分分析(PCA)、无监督学习方法。无监潜在语义分析(LSA)、概率潜在语义分析(PLSA)此外,还简单介绍了另外三种常用的统计机器学习方法。八种常用的统计机器学习方法,即。

2022-11-28 23:08:49 208

原创 《统计学习方法》 第二十一章 PageRank算法

PageRank算法PageRank是互联网网页重要度的计算方法,可以定义推广到任意有向图结点的重要度计算上其基本思想是在有向图上定义随机游走模型即一阶马尔可夫链,描述游走者沿着有向图随机访问各个结点的行为,在一定条件下,极限情况访问每个结点的概率收敛到平稳分布这时各个结点的概率值就是其 PageRank值,表示结点相对重要度有向图上可以定义随机游走模型,即一阶马尔可夫链,其中结点表示状态有向边表示状态之间的转移假设一个结点到连接出的所有结点的转移概率相等转移概率由转移矩阵MMM表示M=[mij]n×nM

2022-11-28 23:06:58 719

原创 《统计学习方法》第二十章 马尔可夫链蒙特卡罗法

LDA模型属于概率图模型可以由板块表示法表示LDA模型中,每个话题的单词分布、每个文本的话题分布、文本的每个位置的话题是隐变量,文本的每个位置的单词是观测变量。模型假设话题由单词的多项分布表示,文本由话题的多项分布表示,单词分布和话题分布的先验分布都是狄利克雷分布。首先随机生成一个文本的话题分布,之后在该文本的每个位置,依据该文本的话题分布随机生成一个话题。LDA模型是含有隐变量的概率图模型模型中,每个话题的单词分布,每个文本的话题分布。文本的每个位置的单词是观测变量LDA模型的学习与推理无法直接求解。

2022-11-28 17:11:19 544

原创 《统计学习方法》第十九章 马尔可夫链蒙特卡罗法

算的方法 马尔可夫链陟特卡罗法 (Markov Chain Monte Carlo, MCMC), 则是以马尔可夫链 (Markov chain)为概率模型的蒙特卡洛法。则该马尔可夫链满足遍历定理当时间趋于无穷时,马尔可夫链的状态分布趋近于平稳分布,函数的样本平均依概率收敛于该函数的数学期望。马尔可夫链蒙特卡罗法构建一个马尔可夫链,使其平稳分布就是要进行抽样的分布, 首先基于该马尔可夫链进行随机游走。的可逆马尔可夫链(满足遍历定理条件)进行的,其平稳分布就是要抽样的目标分布。

2022-11-28 15:59:49 724

原创 《统计学习方法》 第十八章 概率潜在语义分析

给定一个文本集合,通过概率潜在语义分析,可以得到各个文本生成话题的条件概率分布,以及各个话题生成单词的条件概率分布。模型最大特点是用隐变量表示话题,整个模型表示文本生成话题,话题生成单词,从而得到单词-文本共现数据的过程。生成模型刻画文本-单词共现数据生成的过程,共现模型描述文本-单词共现数据拥有的模式。维参数空间中,单词单纯形表示所有可能的文本的分布,在其中的话题单纯形表示在。生成模型表示文本生成话题,话题生成单词从而得到单词文本共现数据的过程。概率潜在语义分析的模型有生成模型,以及等价的共现模型。

2022-11-28 15:20:16 144

原创 《统计学习方法》 第十七章 潜在语义分析

潜在语义分析单词向量空间模型通过单词的向量表示文本的语义内容。以单词-文本矩阵XXX为输入,其中每一行对应一个单词,每一列对应一个文本,每一个元素表示单词在文本中的频数或权值(如TF-IDF)X=[x11x12⋯x1nx21x22⋯x2n⋮⋮⋮xm1xm2⋯xmn]X = \left[ \begin{array} { c c c c } { x _ { 11 } } & { x _ { 12 } } & { \cdots } & { x _ { 1 n } } \\\\ { x _ { 21 } } & {

2022-11-28 15:07:47 486

原创 《统计学习方法》 第十六章 主成分分析PCA

当我们将数据减少到一个维度时,我们失去了该对角线周围的变化,所以在我们的再现中,一切都沿着该对角线。在确保数据被归一化之后,输出仅仅是原始数据的协方差矩阵的奇异值分解。主成分分析方法主要有两种,可以通过相关矩阵的特征值分解或样本矩阵的奇异值分解进行。现在我们有主成分(矩阵U),我们可以用这些来将原始数据投影到一个较低维的空间中。样本主成分分析就是基于样本协方差矩阵的主成分分析。第一主成分的投影轴基本上是数据集中的对角线。的第一主成分、第二主成分、…的每一列对应一个主成分,得到。的所有线性变换中方差最大的。

2022-11-27 21:15:47 702

原创 《统计学习方法》 第十五章 奇异值分解

奇异值分解可以看作是矩阵数据压缩的一种方法,即用因子分解的方式近似地表示原始矩阵,这种近似是在平方损失意义下的最优近似。紧奇异值分解是与原始矩阵等秩的奇异值分解,截断奇异值分解是比原始矩阵低秩的奇异值分解。奇异值分解是弗罗贝尼乌斯范数意义下,也就是平方损失意义下的矩阵最优近似。是方阵,事实上矩阵的奇异值分解可以看作方阵的对角化的推广。奇异值分解包括紧奇异值分解和截断奇异值分解。紧奇奇异值分解是与原始矩阵等秩的奇异值分解。截断奇异值分解是比原始矩阵低秩的奇异值分解。的截断奇异值分解得到的矩阵。

2022-11-27 21:09:00 760

原创 《统计学习方法》 第十四章 聚类方法

得到的类别是平坦的、非层次化的;然后计算每个类的样本的均值,作为类的新的中心;k均值聚类是基于中心的聚类方法,通过迭代,将样本分到k个类中,使得每个样本与其所属类的中心或均值最近,得到k个平坦的,非层次化的类别,构成对空间的划分。(自下而上):聚合法开始将每个样本各自分裂到一个类,之后将相距最近的两类合并,建立一个新的类,重复次操作知道满足停止条件,得到层次化的类别。(自上而下): 分裂法开始将所有样本分到一个类,之后将已有类中相距最远的样本分到两个新的类,重复此操作直到满足停止条件,得到层次化的类别。

2022-11-27 21:00:10 621

原创 《统计学习方法》 第十三章 无监督学习概论

无标注数据是自然得到的数据,模型表示数据的类别、转换或概率无监督学习的本质是学习数据中的统计规律或潜在结构,主要包括聚类、降维、概率估计。无监督学习的基本想法是对给定数据(矩阵数据)进行某种“压缩”,从而找到数据的潜在结构,假定损失最小的压缩得到的结果就是最本质的结构。假设样本原本存在于低维空间,或近似地存在于低维空间,通过降维则可以更好地表示样本数据的结构,即更好地表示样本之间的关系。聚类是将样本集合中相似的样本(实例)分配到相同的类,不相似的样本分配到不同的类。可以考虑发掘数据的纵向结构,对应聚类。

2022-11-27 20:53:47 184

原创 《统计学习方法》 第十二章 监督学习方法总结(原理+代码)

逻辑斯谛回归与最大熵模型、条件随机场的学习策略既可以看成是极大似然估计(或正则化的极大似然估计),又可以看成是极小化逻辑斯谛损失(或正则化的逻辑斯谛损失)。提升方法利用学习的模型是加法模型、损失函数是指数损失函数的特点,启发式地从前向后逐步学习模型,以达到逼近优化目标函数的目的。感知机、逻辑斯谛回归与最大熵模型、条件随机场的学习利用梯度下降法、拟牛顿法等一般的无约束最优化问题的解法。监督学习包括分类、标注、回归。决策树学习的策略是正则化的极大似然估计,损失函数是对数似然损失,正则化项是决策树的复杂度。

2022-11-27 20:52:16 201

原创 《统计学习方法》 第十一章 条件随机场(原理+代码)

线性链条件随机场一般表示为给定观测序列条件下的标记序列的条件概率分布,由参数化的对数线性模型表示。概率无向图模型或马尔可夫随机场的联合概率分布可以分解为无向图最大团上的正值函数的乘积的形式。模型包含特征及相应的权值,特征是定义在线性链的边与结点上的。条件随机场的最大特点是假设输出变量之间的联合概率分布构成概率无向图模型,即马尔可夫随机场。无向图上的结点之间的连接关系表示了联合分布的随机变量集合之间的条件独立性,即马尔可夫性。维特比算法是给定观测序列求条件概率最大的标记序列的方法。条件随机场是判别模型。

2022-11-27 20:46:15 615

原创 《统计学习方法》 第十章 隐马尔可夫模型(原理+代码)

Baum-Welch算法,也就是EM算法可以高效地对隐马尔可夫模型进行训练, 它是一种非监督学习算法。前向-后向算法是通过递推地计算前向-后向概率可以高效地进行隐马尔可夫模型的概率计算。,表示状态序列和观测序列的联合分布,但是状态序列是隐藏的,不可观测的。标注问题是给定观测序列预测其对应的标记序列。维特比算法应用动态规划高效地求解最优路径,即概率最大的状态序列。描述由一个隐藏的马尔可夫链随机生成不可观测的状态的序列。再由各个状态随机生成一个观测而产生观测的序列的过程。使得在该模型下观测序列概率。

2022-11-27 20:40:39 355

原创 《统计学习方法》 第九章 EM算法(原理+代码)

EM算法是含有隐变量的概率模型极大似然估计或极大后验概率估计的迭代算法。在一般条件下EM算法是收敛的,但不能保证收敛到全局最优。隐马尔可夫模型的非监督学习也是EM算法的一个重要应用。算法在每次迭代后均提高观测数据的似然函数值,即。高斯混合模型的参数估计是EM算法的一个重要应用。EM算法通过迭代求解观测数据的对数似然函数。在构建具体的EM算法时,重要的是定义。主要应用于含有隐变量的概率模型的学习。含有隐变量的概率模型的数据表示为。的极大化,实现极大似然估计。算法的特点是每次迭代增加。函数的极大-极大算法。

2022-11-27 20:36:47 1123

原创 《统计学习方法》第八章 提升方法(原理+代码)

最后,AdaBoost将基本分类器的线性组合作为强分类器,其中给分类误差率小的基本分类器以大的权值,给分类误差率大的基本分类器以小的权值。提升:每个基本模型训练时的数据集采用不同权重,针对上一个基本模型分类错误的样本增加权重,使得新的模型重点关注误分类样本。所谓的组合模型是由多个基本模型构成的模型,组合模型的预测效果往往比任意一个基本模型的效果都要好。每次迭代中,提高那些被前一轮分类器错误分类数据的权值,而降低那些被正确分类的数据的权值。AdaBoost算法的一个解释是该算法实际是前向分步算法的一个实现。

2022-11-27 20:28:33 359

原创 《统计学习方法》 第七章 支持向量机(原理+代码)

支持向量机支持向量机最简单的情况是线性可分支持向量机,或硬间隔支持向量机构建它的条件是训练数据,线性可分其学习策略是最大间隔法,可以表示为凸二次规划问题,其原始最优化问题为min⁡w,b12∥w∥2\min _{w, b} \frac{1}{2}\|w\|^{2}w,bmin​21​∥w∥2yi(w⋅xi+b)−1⩾0,i=1,2,⋯ ,N\quad y_{i}\left(w \cdot x_{i}+b\right)-1 \geqslant 0, \quad i=1,2, \cdots, Nyi​(w⋅xi

2022-11-27 20:23:16 353

原创 《统计学习方法》 第六章 逻辑斯谛回归和最大熵模型(原理+代码)

最大熵原理认为在所有可能的概率模型(分布)的集合中,熵最大的模型是最好的模型。逻辑斯谛回归模型及最大熵模型学习一般采用极大似然估计,或正则化的极大似然估计。逻辑斯谛回归模型及最大熵模型学习可以形式化为无约束最优化问题。逻辑斯谛回归模型是由输入的线性函数表示的输出的对数几率模型。最大熵原理应用到分类模型的学习中,有以下约束最优化问题。逻辑斯谛回归模型是由以下条件概率分布表示的分类模型。逻辑斯谛回归模型与最大熵模型都属于对数线性模型。逻辑斯谛回归模型源自逻辑斯谛分布,其分布函数。

2022-11-25 12:28:38 286

原创 《统计学习方法》 第五章 决策树(原理+代码)

决策树的剪枝,往往从已生成的树上剪掉一些叶结点或叶结点以上的子树,并将其父结点或根结点作为新的叶结点,从而简化生成的决策树。决策树的生成,通常使用信息增益最大、信息增益比最大或基尼指数最小作为特征选择的准则。决策树的生成往往通过计算信息增益或其他指标,从根结点开始,递归地产生决策树。由于生成的决策树存在过拟合问题,需要对它进行剪枝,以简化学到的决策树。规则的集合,也可以看作是定义在特征空间划分上的类的条件概率分布。决策树学习旨在构建一个与训练数据拟合很好,并且复杂度小的决策树。决策树可以转换成一个。

2022-11-25 12:28:08 119

原创 《统计学习方法》 第四章 朴素贝叶斯(原理+代码)

由于这一假设,模型包含的条件概率的数量大为减少,朴素贝叶斯法的学习与预测大为简化。后验概率最大等价于0-1损失函数时的期望风险最小化。概率估计方法可以是极大似然估计或贝叶斯估计。因而朴素贝叶斯法高效,且易于实现。其缺点是分类的性能不一定很高。具体来说,利用训练数据学习。然后求得后验概率分布。分到后验概率最大的类。

2022-11-25 12:27:38 133

原创 将conda中的虚拟环境迁移到另一个conda下(Linux)

将env_name1拷贝到conda2的虚拟环境下:cp -r env_name1 conda2/envs。进入到conda2中新拷贝进来的env_name1环境:cd conda2/envs/env_name1。将conda1上的虚拟环境env_name1,移动到conda2上。进入conda1中envs目录: cd conda1/envs。激活新环境:conda activate env_name1。查看安装库是否都存在,若都存在,则迁移成功。找到bin文件,并进入:cd bin。

2022-11-24 21:45:00 2484

原创 《统计学习方法》 第三章 K近邻法(原理+代码)

通常,依次选择坐标轴对空间切分,选择训练实例点在选定坐标轴上的中位数 (median)为切分点。值的选择反映了对近似误差与估计误差之间的权衡,通常由交叉验证选择最优的。树是一种对k维空间中的实例点进行存储以便对其进行快速检索的树形数据结构。坐标的中位数为切分点,将根结点对应的超矩形区域切分为两个子区域。坐标的中位数为切分点,将该结点对应的超矩形区域切分为两个子区域。树可以省去对大部分数据点的搜索, 从而减少搜索的计算量。树是一种便于对k维空间中的数据进行快速检索的数据结构。

2022-11-24 18:00:00 323 3

原创 《统计学习方法》 第一章 统计学习方法概论(原理+代码)

监督学习从给定有限的训练数据出发,假设数据是独立同分布的,而且假设模型属于某个假设空间。统计学习是关于计算机基于数据构建概率统计模型并运用模型对数据进行分析与预测的一门学科。回归问题中,损失函数是平方损失,正则化可以是参数向量的L2范数,也可以是L1范数。统计学习方法三要素——模型、策略、算法,对理解统计学习方法起到提纲挈领的作用。统计学习中,进行模型选择或者说提高学习的泛化能力是一个重要问题。统计学习包括监督学习、非监督学习、半监督学习和强化学习(学习方法泛化能力的分析是统计学习理论研究的重要课题。

2022-11-23 23:45:00 228 1

原创 《统计学习方法》 第二章 感知机(原理+代码)

当训练数据集线性可分时,感知机学习算法存在无穷多个解,其解由于不同的初值或不同的迭代顺序而可能有所不同。当训练数据集线性可分时,感知机学习算法是收敛的。感知机算法在训练数据集上的误分类次数。感知机学习算法是基于随机梯度下降法的对损失函数的最优化算法,有原始形式和对偶形式。的值,使分离超平面向该无分类点的一侧移动,直至误分类点被正确分类。在这个过程中一次随机选取一个误分类点使其梯度下降。损失函数对应于误分类点到分离超平面的总距离。当实例点被误分类,即位于分离超平面的错误侧。对其进行二类分类的线性分类模型。

2022-11-23 14:34:58 200

原创 Conda创建虚拟环境很慢咋办?(Linux)

如果还是慢:先移除刚设置的源并恢复默认。如果还是慢:就更新conda。执行 env.sh 文件。将下载源更改为清华源。文件,并写入如下代码。

2022-11-17 16:10:53 1436

原创 神经网络编译器TVM

另一部分是schedule: 也即是代码层面对这些数学逻辑实现的调度层面的东西,比如我的for循环如何设计,中间变量如何存储,cache命中率如何,寄存器访问如何设置.是否有两步合并做一步的更高效的操作.这些部分的实现,对于我们上面说的tensorRT,tensorflow之类他有统一的实现,不会对每个神经网络做定制.而这部分对于推理时间的影响十分的大.。生成的代码就是咱们需要的推理代码啦,平台为了我们方便的使用,同时又帮我们编译成的so库,或者dll库。不同平台动态库类型不一样。形成最终的推理代码。

2022-11-17 10:37:58 1315

原创 Pytorch转Onnx转TensorRT

首先使用pytorch框架训练深度学习模型,然后使用某些工具将训练好的pytorch模型转为onnx,最后转为tensorRT。目前模型部署的常见做法是pytorch->onnx->tensorRT。找到TensorRT-8.5.1.7文件(这是我自己的版本号)当前文件下会出现resnet18.trt 说明转换成功。将onnx模型转成TensorRT模型。将pytorch模型转成onnx模型。能够正常打印,即onnx模型没有问题。检查onnx模型是否能推理。获取pytorch模型。将onnx文件移动到。

2022-11-14 17:21:30 1132 1

原创 Pytorch 分布式训练中DP和DDP的原理和用法

在使用 distributed 包的任何其他函数之前,需要使用 init_process_group 初始化进程组,同时初始化 distributed 包。ring-all-reduce模式没有server节点,worker与worker之间的通信构成一个环。如果是单机多卡,由于一个进程内就只有一个 GPU,所以 rank 也就表示第几块 GPU。因为充当server的GPU需要一定的显存用来保存worker节点计算出的局部梯度。初始化模型,从server节点拉取最新的模型参数(pull),

2022-11-14 16:02:16 2075

原创 CUDA 异构并行计算与编程模型

CUDA从入门到放弃

2022-11-10 18:45:09 1609 2

原创 C++智能指针:auto_ptr, unique_ptr, shared_ptr, weak_ptr

shared_ptr 是为了解决 auto_ptr 在对象所有权上的局限性(auto_ptr 是独占的), 在使用引用计数的机制上提供了可以共享所有权的智能指针。比如B对象中有一个方法print(),我们不能这样访问,pa->pb_->print(),因为pb_是一个weak_ptr,应该先把它转化为shared_ptr。如果把其中一个改为weak_ptr就可以了,我们把类A里面的shared_ptr pb_,改为weak_ptr pb_ ,运行结果如下。当计数等于0时,资源会被释放。

2022-11-10 16:10:07 105

原创 LibTorch 使用torch::from_blob出现的问题

LibTorch 使用torch::from_blob出现的问题

2022-11-10 15:09:05 1347

sift特征检测算法源码(Python版)

SIFT(Scale-invariant feature transform)是一种检测局部特征的算法,该算法通过求一幅图中的特征点(interest points,or corner points)及其有关scale 和 orientation 的描述子得到特征并进行图像特征点匹配,获得了良好效果。

2020-05-13

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除