CN106845534A - 一种基于数据压缩表示的支持向量机快速实现方法和装置 - Google Patents
一种基于数据压缩表示的支持向量机快速实现方法和装置 Download PDFInfo
- Publication number
- CN106845534A CN106845534A CN201710007829.8A CN201710007829A CN106845534A CN 106845534 A CN106845534 A CN 106845534A CN 201710007829 A CN201710007829 A CN 201710007829A CN 106845534 A CN106845534 A CN 106845534A
- Authority
- CN
- China
- Prior art keywords
- supporting vector
- data
- model data
- bits
- svms
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/21—Design or setup of recognition systems or techniques; Extraction of features in feature space; Blind source separation
- G06F18/214—Generating training patterns; Bootstrap methods, e.g. bagging or boosting
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/24—Classification techniques
- G06F18/241—Classification techniques relating to the classification model, e.g. parametric or non-parametric approaches
- G06F18/2411—Classification techniques relating to the classification model, e.g. parametric or non-parametric approaches based on the proximity to a decision surface, e.g. support vector machines
Landscapes
- Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Theoretical Computer Science (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Bioinformatics & Computational Biology (AREA)
- Artificial Intelligence (AREA)
- Evolutionary Biology (AREA)
- Evolutionary Computation (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本申请提供了一种基于数据压缩表示的支持向量机快速实现方法和装置,适用于所有需要节省支持向量存储空间的逻辑IC或ASIC芯片电路设计,包括但不局限于图像识别等应用领域,属于逻辑IC或ASIC芯片的电路设计技术领域。该方法在对训练样本进行训练得到的模数数据进行保存时,将模型数据中的每个支持向量分量以24比特大小保存在内存中。与现有技术相比,在满足支持向量机所需要的精度要求下,每个支持向量分量节省了8比特的内存空间,支持向量只需要用原来的四分之三的存储区域就能存放。由于通常支持向量的个数较多,而且支持向量的维度又较大,因此,采用本申请提供的基于数据压缩表示的支持向量机快速实现方法可以节约的存储空间十分可观。
Description
技术领域
本申请涉及计算机数据处理领域,具体涉及一种基于数据压缩表示的支持向量机快速实现方法和装置。
背景技术
随着信息产业的飞速发展和公共安全意识的深入人心,视频监控领域越来越受到大众的关注。监控摄像头增加所带来的结果是对系统后台的数据处理和存储的能力提出了更高的要求,同时应对突发事件必须消耗大量人力人工识别特定目标。如果把一些识别过程嵌入到前台,将会大大降低系统对后台性能的要求。
近年,人脸识别、手势识别等技术已经开始大规模应用,车牌识别技术也日趋成熟。把车牌识别模块集成到监控摄像头系统中将大量降低人工识别的工作量,同时对信息联网也能起到很大的推动作用。
识别技术通常采用的两种学习算法是BP神经网络和支持向量机(SVM,SupportVector Machine)。其中由于支持向量机的泛化能力强而经常被采用。
以人脸识别为例,利用SVM来学习人脸图像之间的相似性,以进行人脸识别。在相似性学习中,P.Jonahton Phillips提出了差空间的构造方法来构造样本对,在差空间中,着重研究同一类个体不同图像之间的差别和不同类个体图像之间的差别。实验结果表明,该方法与传统的基于PCA(Principal Component Analysis,主元分析)的方法相比,确实具有一定的优势。但是,差空间方法的样本复杂度很高,例如有n幅人脸图像,则在差空间中会产生n2个训练样本,再采用SVM来训练,由于该训练样本数巨大,导致了SVM的训练时间过长,甚至内存溢出而无法执行。
下面以基于支持向量机的人脸识别方法为例做进一步说明,请参见申请公布号为CN 103679160A,发明名称为“一种人脸识别方法和装置”的中国专利申请。
该专利提供了一种人脸识别的方法,该方法基于一类支持向量机来学习人脸图像之间的相似性,包括:对人脸样本进行分类得到训练样本组和测试样本组;对训练样本组中的训练样本进行分类得到至少两个类别,在每个类别中获取训练样本生成差样本对,并构造训练样本对组;依据训练样本对组对一类支持向量机进行训练,得到其决策模型参数,并得到相似性判别模型;将测试样本组中任意获取两个测试样本生成的测试差样本对输入相似性判别模型中进行相似性判断。
可知,为了降低计算的复杂度,在该方法中,输入一类支持向量机的训练样本采用分类并依据同类训练样本中生成训练样本差的方式,使得输入一类支持向量机的数据量减少。
再请参考申请号为CN201510386962.X的中国专利申请,其公开了一种基于改进型稠密轨迹的移动边界采样的行为识别方法。研究表明改进型稠密轨迹在行为识别上可以取得最先进的结果,但是它耗内存且计算复杂。因此,在不影响识别率的情况下,用移动边界采样方法来减少轨迹数,能节省内存并提高后期的处理速度。首先基于移动边界采样的改进型稠密轨迹来提取局部底层特征;其次使用Fisher核对局部底层特征进行聚类,形成Fisher向量,以提高特征的紧凑性、有序性;在FV作为分类器的输入之前对它们采用LDA/CA的降维技术来提高存储效率、训练和测试的时间并且进一步提高特征辨别性;最后对于不同的描述器采用后融合技术进行数据的结合或者FV向量之间的融合,从而来提高识别率。
再请参考申请号为CN201310180015.6的中国专利申请,其公开了一种基于在线学习的局部可形变目标检测方法及其系统。该方法包括:步骤1、利用训练集中的样本图像对局部可形变目标检测模型进行训练,得到初步训练后的局部可形变目标检测模型;步骤2、利用所述局部可形变目标检测模型对待测图像进行目标检测,并利用GUI标注在线学习方法对已有的局部可形变目标检测模型进行更新优化。上述方法将整个耗时的训练过程分布在每次目标检测之中,同时模型可以实时更新,局部可形变检测模型鲁棒性会进一步得到提升,且对内存需求量不大。根据本发明的上述方法,在大数据背景下,可以快速有效地处理用于目标检测的数据。
综上可以看得,在基于支持向量机的学习算法中,对内存(支持向量的存储空间)的占用较大,已经成为本领域急需解决的问题之一。
发明内容
本申请提供一种基于数据压缩表示的支持向量机快速实现方法和装置,解决了基于支持向量机的学习算法中,支持向量占用存储空间大的问题。
根据本申请的第一方面,本申请提供了一种基于数据压缩表示的支持向量机快速实现方法,包括:
制作训练样本;
对训练样本进行训练,以得到模型数据;
将模型数据中的每个支持向量分量以24比特大小保存在内存中;
根据所述模型数据预测识别目标所属的类别,得到预测结果。
在一实施例中,将模型数据中的每个支持向量分量以24比特大小保存在存储单元,包括:将每个支持向量分量的整数部分以8比特表示,小数部分以16比特表示。
在一实施例中,将模型数据中的每个支持向量分量以24比特大小保存在内存中,包括:将模型数据中的每个支持向量左移16位并取整,以得到24比特大小的数据。
在一实施例中,将模型数据中的每个支持向量分量以24比特大小保存在内存中,包括:
先存入数据的低8比特;
将数据右移8位再存入低8比特;
将数据右移8位再存入低8比特。
在一实施例中,所述方法还包括在将模型数据进行保存之前,分配一片连续的内存区域。
在一实施例中,所述方法还包括将支持向量分量进行保存之前,先判断支持向量的整数部分是否在[-128,127]之间,如果否,则将该支持向量分量以32比特大小保存在内存中。
在一实施例中,根据所述模型数据预测识别目标所属的类别,得到预测结果,包括:预测过程中的判决函数采用径向基核函数,所述径向基核函数通过查找表的方式实现。
在一实施例中,所述判决函数如下:
其中,g(x)表示决策函数,n表示训练样本的数量,αi表示拉格朗日乘子,yi表示训练样本的标签,幂函数表示径向基核函数;指数部分-γ||xi-x||2分为第一部分γ和第二部分||xi-x||2,第一部分是常数因子,第二部分是两个向量差的模的平方。
在一实施例中,通过查找表的方式实现所述径向基核函数的步骤包括:
确定径向基核函数中指数部分的范围和精度;
计算所有需要输入的指数的个数;
计算所有的指数输入;
计算所有指数函数的输出结果;
对所述输出结果进行归一化;
对归一化的输出结果进行定点化。
根据本申请的第二方面,本申请还相应提供了一种基于数据压缩表示的支持向量机快速实现装置,包括:
样本制作模块,用于制作训练样本;
训练模块,用于对训练样本进行训练,以得到模型数据;
保存模块,用于将模型数据中的每个支持向量分量以24比特大小保存在内存中;
预测模块,用于根据所述模型数据预测识别目标所属的类别,得到预测结果。
在一实施例中,保存模块用于将模型数据中的每个支持向量分量以24比特大小保存在内存中时,保存模块用于将每个支持向量分量的整数部分以8比特表示,小数部分以16比特表示。
在一实施例中,保存模块用于将模型数据中的每个支持向量分量以24比特大小保存在内存中时,保存模块用于将模型数据中的每个支持向量左移16位并取整,以得到24比特大小的数据。
在一实施例中,保存模块用于将模型数据中的每个支持向量分量以24比特大小保存在内存中时,保存模块用于先存入数据的低8比特,将数据右移8位再存入低8比特,再将数据右移8位再存入低8比特。
在一实施例中,保存模块还用于在将模型数据进行保存之前,分配一片连续的内存区域。
在一实施例中,保存模块还用于将支持向量分量进行保存之前,先判断支持向量的整数部分是否在[-128,127]之间,如果否,则将该支持向量分量以32比特大小保存在内存中。
在一实施例中,预测模块用于根据所述模型数据预测识别目标所属的类别,得到预测结果时,预测模块用于在预测过程中采用径向基核函数作为判决函数,并通过查找表的方式实现所述径向基核函数。
在一实施例中,所述判决函数如下:
其中,g(x)表示决策函数,n表示训练样本的数量,αi表示拉格朗日乘子,yi表示训练样本的标签,幂函数表示径向基核函数;指数部分-γ||xi-x||2分为第一部分γ和第二部分||xi-x||2,第一部分是常数因子,第二部分是两个向量差的模的平方。
在一实施例中,预测模块用于通过查找表的方式实现所述径向基核函数时,预测模块用于确定径向基核函数中指数部分的范围和精度,计算所有需要输入的指数的个数,计算所有的指数输入,计算所有指数函数的结果,对所述结果进行归一化,对归一化的结果进行定点化。
现有技术中,在支持向量机的实现方法中,支持向量均采用32比特浮点型表示,实际上支持向量的整数部分只需要8比特就能表示,而小数部分采用16比特就能满足支持向量机所需要的精度。因此,本申请提供的基于数据压缩表示的支持向量机快速实现方法和装置中,在对训练样本进行训练得到的模数数据进行保存时,将模型数据中的每个支持向量分量以24比特大小保存在内存中。与现有技术相比,在满足支持向量机所需要的精度要求下,每个支持向量分量节省了8比特的内存空间,,支持向量只需要用原来的四分之三的存储区域就能存放。由于通常支持向量的个数较多,而且支持向量的维度又较大,因此,采用本申请提供的基于数据压缩表示的支持向量机快速实现方法可以节约的存储空间十分可观。
附图说明
图1为本申请实施例一中基于数据压缩表示的支持向量机快速实现方法流程图;
图2为本申请实施例一中支持向量处理方法的流程图;
图3为本申请实施例一中支持向量处理方法的流程图;
图4为本申请实施例一中支持向量分量处理前后在内存中存储方式的示意图;
图5为本申请实施例二中基于数据压缩表示的支持向量机快速实现装置的模块示意图;
图6为本申请实施例三中使用查找表实现径向基核函数的方法流程图;
图7为本申请实施例三中使用查找表实现径向基核函数的方法流程图;
图8为本申请实施例四中基于数据压缩表示的支持向量机快速实现装置的模块示意图。
具体实施方式
本申请提供了一种基于数据压缩表示的支持向量机快速实现方法和装置,适用于所有需要使用查找表实现计算径向基核函数以及需要节省支持向量存储空间的逻辑IC或ASIC芯片电路设计,包括但不局限于图像识别等应用领域。属于逻辑IC或ASIC芯片的电路设计技术领域。
下面通过具体实施方式结合附图对本申请作进一步详细说明。
实施例一
请参考图1,本实施例提供了一种基于数据压缩表示的支持向量机快速实现方法,包括下面步骤:
S1.1:制作训练样本,将需要训练的数据转换成规定的格式。
S1.2:对训练样本进行训练,以得到模型数据。
S1.3:将模型数据中的每个支持向量分量以24比特大小保存在内存中。
S1.4:根据所述模型数据预测识别目标所属的类别,得到预测结果。
在步骤S1.4中,在识别之前首先应该导入模型数据到内存,即步骤S1.3。识别是指根据已有的模型数据对特定的识别目标判断其所属类别。模型数据中包含了重要的支持向量数据,下面将说明本实施例提供的方法是如何减小支持向量在内存中的占用空间,以及如何有效缩短识别过程消耗的时间。
请参考图2,其表示了本实施例提供的方法中如何处理模型数据中的所有支持向量的分量(步骤S1.3)。模型数据中包含了两个重要的参数:var_count表示支持向量的维度,即支持向量所有分量的个数;sv_total表示模型数据中包含的所有支持向量的个数。为了对每个支持向量的分量都做一次处理必须要进行两次循环。
S2.1:在内存空间中分配一片连续的区域用于存放处理后的支持向量。由于本实施例中每个支持向量分量是以24比特存储的,即处理后的支持向量分量均用3字节表示,所以分配的内存空间必须大于3*var_count*sv_total(byte)。
S2.2:初始化指针ptr指向步骤S2.1中分配的内存空间的首地址,同时初始化两个变量(i和j)用于分别对支持向量的维度和支持向量的个数计数。使得每个支持向量的分量都得到处理。
S2.3:对支持向量的分量进行处理。现有技术中,支持向量均采用32比特浮点型表示,实际上支持向量的整数部分只需要8比特就能表示,而小数部分采用16比特就能满足支持向量机所需要的精度。因此,本步骤中,对支持向量分量进行处理,即将原来支持向量机以4字节表示的浮点型转换为只需要3字节就能表示的定点化类型。
S2.4:判断当前支持向量的分量是否处理完毕,如果是,则执行步骤S2.5;如果否,则i加1,以转到步骤S2.3,对下一个支持向量分量进行处理。
S2.5:判断当前支持向量是否为最后一个,如果是,则结束处理过程;如果否,则j加1,以转到步骤S2.3,对下一个支持向量进行处理。
请参考图3,其表示了如何对每个支持向量分量进行处理从而使得原来需要4字节表示的浮点型转换为只需要3字节就能表示的定点化类型(步骤S2.3)。
S3.1:先判断支持向量分量的整数部分是否在[-128,127]之间,如果是,则转到步骤S3.2;如果否,则将该支持向量分量以32比特大小保存在内存中,即按现有技术中的保存方式保存在内存中,以防止在后续的左移过程中溢出。
S3.2:定点化处理。即将支持向量分量整体左移16比特,也就是对原来的浮点型数据乘上1<<16;对左移后的数据取整,将8比特多余的小数部分丢弃,这样原来需要32比特表示的数据现在只需要24比特就能表示,并且能够保证支持向量机的精度。
S3.3:取低8比特存入内存,并使指针加一指向下一个存放的内存单元。
S3.4:将数据右移8位再存入低8比特,同时使指针加一指向下一个存放的内存单元。
S3.5:将数据右移8位再存入低8比特,同时使指针加一指向下一个存放的内存单元,以准备保存下一个分量。
请参考图4,其表示支持向量(SV)处理前后在内存中的变化。首先处理前支持向量的每一个分量均以32比特浮点型表示,并且每个分量在内存中也是连续的,图中只画出了两个支持向量分量,分别是SV分量1、SV分量2。将分量左移16比特并取整,数据在内存中是以32比特定点数表示,但是只有24比特是有效数据,最高8比特为无效数据。图中A、B、C分别表示8比特数据,表示内存中实际的状态(左边为低地址,右边为高地址),值的大小为C<<16+B<<8+A。图4中两个定点化后的分量的位置不表示在内存中实际的相对位置;处理后在内存中的值并没有变化,但是一个数据只需要24比特定点数表示,没有无效数据,因而节省了内存空间。
经过处理,所有支持向量只需要用原来的四分之三的存储区域就能存放。由于通常支持向量的个数很多而支持向量的维度又很大,采用这一技术节约的存储空间将十分可观。
需要说明的是,本实施例中,仅对步骤S1.3模型数据的保存进行了改进,从而使得支持向量在进行存储时占用的内存空间较少。对于步骤S1.4,即预测步骤,可以采用现有技术中任意一种可行的方式。
实施例二
请参考图5,基于上述实施例一提供的基于数据压缩表示的支持向量机快速实现方法,本实施例相应提供了一种基于数据压缩表示的支持向量机快速实现装置,包括样本制作模块101、训练模块102、保存模块103和预测模块104。
样本制作模块101用于制作训练样本,将需要训练的数据转换成规定的格式。
训练模块102用于对训练样本进行训练,以得到模型数据。
保存模块103用于将模型数据中的每个支持向量分量以24比特大小保存在内存中。
预测模块104用于根据所述模型数据预测识别目标所属的类别,得到预测结果。
预测模块104在识别之前首先应该导入模型数据到内存,即保存模块先将模型数据中的支持向量保存到内存中。识别是指根据已有的模型数据对特定的识别目标判断其所属类别。模型数据中包含了重要的支持向量数据,下面将说明本实施例提供的装置是如何减小支持向量在内存中的占用空间,以及如何有效缩短识别过程消耗的时间。
模型数据中包含了两个重要的参数:var_count表示支持向量的维度,即支持向量所有分量的个数;sv_total表示模型数据中包含的所有支持向量的个数。为了对每个支持向量的分量都做一次处理必须要进行两次循环。
保存模块103用于在内存空间中分配一片连续的区域用于存放处理后的支持向量。由于本实施例中每个支持向量分量是以24比特存储的,即处理后的支持向量分量均用3字节表示,所以分配的内存空间必须大于3*var_count*sv_total(byte)。
保存模块103用于初始化指针ptr,使其指向上述分配的内存空间的首地址,同时初始化两个变量(i和j),用于分别对支持向量的维度和支持向量的个数计数。使得每个支持向量的分量都得到处理。
保存模块103用于对支持向量的分量进行处理。现有技术中,支持向量均采用32比特浮点型表示,实际上支持向量的整数部分只需要8比特就能表示,而小数部分采用16比特就能满足支持向量机所需要的精度。因此,本实施例中,对支持向量分量进行处理,即将原来支持向量机以4字节表示的浮点型转换为只需要3字节就能表示的定点化类型。
保存模块103用于判断当前支持向量的分量是否处理完毕,如果是,则对下一个支持向量进行处理;如果否,则i加1,以对当前支持向量的下一个分量进行处理。
保存模块103用于判断当前支持向量是否为最后一个,如果是,则结束处理过程;如果否,则j加1,以对下一个支持向量进行处理。
下面再进一步说明保存模块103是如何对每个支持向量分量进行处理从而使得原来需要4字节表示的浮点型转换为只需要3字节就能表示的定点化类型。
保存模块103用于先判断支持向量分量的整数部分是否在[-128,127]之间,如果是,则进行定点化处理;如果否,则将该支持向量分量以32比特大小保存在内存中,即按现有技术中的保存方式保存在内存中,以防止在后续的左移过程中溢出。
在判断到支持向量分量的整数部分是否在[-128,127]之间时,保存模块103用于定点化处理。即将支持向量分量整体左移16比特,也就是对原来的浮点型数据乘上1<<16;对左移后的数据取整,将8比特多余的小数部分丢弃,这样原来需要32比特表示的数据现在只需要24比特就能表示,并且能够保证支持向量机的精度。
保存模块103用于取低8比特存入内存,并使指针加一指向下一个存放的内存单元;将数据右移8位再存入低8比特,同时使指针加一指向下一个存放的内存单元;将数据右移8位再存入低8比特,同时使指针加一指向下一个存放的内存单元,以准备保存下一个分量。保存模块103以这种方式将支持向量分量进行保存。
请参考图4,其表示支持向量(SV)处理前后在内存中的变化。首先处理前支持向量的每一个分量均以32比特浮点型表示,并且每个分量在内存中也是连续的,图中只画出了两个支持向量分量,分别是SV分量1、SV分量2。将分量左移16比特并取整,数据在内存中是以32比特定点数表示,但是只有24比特是有效数据,最高8比特为无效数据。图中A、B、C分别表示8比特数据,表示内存中实际的状态(左边为低地址,右边为高地址),值的大小为C<<16+B<<8+A。图4中两个定点化后的分量的位置不表示在内存中实际的相对位置;处理后在内存中的值并没有变化,但是一个数据只需要24比特定点数表示,没有无效数据,因而节省了内存空间。
经过处理,所有支持向量只需要用原来的四分之三的存储区域就能存放。由于通常支持向量的个数很多而支持向量的维度又很大,采用这一技术节约的存储空间将十分可观。
需要说明的是,本实施例中,仅对保存模块103用于保存模型数据的方式进行了改进,从而使得支持向量在进行存储时占用的内存空间较少。对于预测模块104,其预测方式可以采用现有技术中任意一种可行的方式。
实施例三
同样请参考图1,本实施提供了另一种基于数据压缩表示的支持向量机快速实现方法,包括下面步骤:
S1.1:制作训练样本,将需要训练的数据转换成规定的格式。
S1.2:对训练样本进行训练,以得到模型数据。
S1.3:将模型数据中的每个支持向量分量以24比特大小保存在内存中。
S1.4:根据所述模型数据预测识别目标所属的类别,得到预测结果。
首先,本实施例提供的方法与上述实施例一相比,步骤S1.3与实施例一相同,本实施例不再赘述。因此,由于采用了实施例一提供的支持向量存储方式,本实施例也可以解决现有技术中支持向量存储空间大的问题。
另外,本实施例与实施例一的区别在于:本实施例在步骤S1.4中,预测过程中的判决函数采用径向基核函数,并且径向基核函数通过查找表的方式实现。本实施例中,先针对特定库训练出模型数据,并对模型数据作进一步的统计,根据统计的数据对查找表进行配置。
下式为本实施例中判决函数的表达式:
其中,g(x)表示决策函数,n表示训练样本的数量,αi表示拉格朗日乘子,yi表示训练样本的标签,幂函数表示径向基核函数;指数部分-γ||xi-x||2分为第一部分γ和第二部分||xi-x||2,第一部分是常数因子,第二部分是两个向量差的模的平方。
请参考图6,本实施例中,通过查找表的方式实现径向基核函数的步骤包括:
S4.1:确定径向基核函数中指数部分的范围和精度。
S4.2:计算所有需要输入的指数的个数。
S4.3:计算所有的指数输入。
S4.4:计算所有指数函数的输出结果。
S4.5:对输出结果进行归一化。
S4.6:对归一化的输出结果进行定点化。
本实施例中,指数的第二部分的范围在[0,512),小数部分用2bit表示就能够满足精度要求,由于γ因子较小,指数函数运算出的结果的范围在[0,1],因此设置基为0,也就是不需要进行归一化。如果运算出的结果不在[0,1],可以通过下式来确定合适的基。
其方法是找到指数函数也就是分子的最大值,通过选择合适的N使得所有值均在[0,1]。
计算输入的个数是指计算所有需要输入的指数的个数ElemNum,其计算方法通过下式得出。
ElemNum=(TabMax-TabMin)<<TabPreci
ElemNum与第二部分的最大值、最小值、小数部分的比特位数有关。在本实施例中,ElemNum为2048个。查找表的大小可以通过ElemNum和输出的位数来确定,本实施例中指定输出的精度为16比特,则查找表的大小为2048*16比特,也即4KB。这一数值在分配内存时需要用到。
请参考图7,为计算输入和计算输出并处理的详细流程图。
S5.1:首先在内存空间中分配一片连续的区域用于存放指数函数的输出结果。查找表的大小与输入的个数和输出的位数有关,在上述步骤中已计算得到。
S5.2:初始化指针ptr,以指向该内存空间的首地址,用于存放输出值。ptr指向单元的大小为输出的位宽,也即16比特。同时初始化计数器i用于对输入的个数进行计数,每计算完一个输出,计数器加一。计数器的值还用于辅助计算当前输入。
S5.3:计算当前输入,指计算指数函数的指数的第二部分。计算方法如下:
ExpIn=TabMin+(float)i/(1<<TabInPreci)
此处用到了上述计数器的当前值。输入的精度TabInPreci决定了第二部分连续两个输入差值。精度越高,差值越小,查表的结果就越精确。在本实施例中,设置的输入精度TabInPreci为2,那么第二部分以1>>2,也即0.25递增。
S5.4:计算当前输出,指计算指数函数的值。计算方法如下:
ExpOut=exp(-gamma*ExpIn)
直接使用系统指数函数,根据上面的公式,指数部分输入是当前输入与-γ的乘积。在本实施例中,前3个表中原始数据为e-γ*0、e-γ*0.25、e-γ*0.50。
S5.5:归一化。
S5.6:定点化。
为了便于在硬件里存储和运算,需要将上面的原始数据进行归一化和定点化,方法如下:
ExpOut=(exp(-gamma*ExpIn)/(1<<N))*(1<<15)
对数据归一化就是将原数据统一除以一个相同的基1<<N,使得所有查找表的数据在归一化后的范围在[0,1]。
由于已经对数据进行了归一化,因此整数部分最多需要1比特就能表示,规定对输出采用16比特表示,因而需要将归一化后的数据进行定点化处理,将数据整体左移15比特并取整,舍弃多余的小数位。
S5.7:最后判断是否当前处理的数据是最后一个,如果不是那么继续处理并且将指针移动到下一单元。如果全部处理完毕则结束。
本实施例提供的基于数据压缩表示的支持向量机快速实现方法,能充分利用径向基核函数识别精度高的特点,同时使用查找表实现的方式规避其运算速度慢的缺点,使得支持向量机识别既快速又精确。其次,本实施例充分利用支持向量数据的特点,有效降低了支持向量的存储空间。
实施例四
请参考图8,基于上述实施例三提供的基于数据压缩表示的支持向量机快速实现方法,本实施例相应提供了一种基于数据压缩表示的支持向量机快速实现装置,包括样本制作模块201、训练模块202、保存模块203和预测模块204。
样本制作模块201用于制作训练样本,将需要训练的数据转换成规定的格式。
训练模块202用于对训练样本进行训练,以得到模型数据。
保存模块203用于将模型数据中的每个支持向量分量以24比特大小保存在内存中。
预测模块204用于根据所述模型数据预测识别目标所属的类别,得到预测结果。
首先,本实施例提供的装置与上述实施例二相比,保存模块203与实施例一中保存模块103的工作原理相同,本实施例不再赘述。因此,由于采用了实施例二提供的支持向量存储方式,本实施例也可以解决现有技术中支持向量存储空间大的问题。
另外,本实施例与实施例二的区别在于:本实施例中预测模块204用于采用径向基核函数作为预测过程中的判决函数,并且通过查找表的方式实现径向基核函数。本实施例中,先针对特定库训练出模型数据,并对模型数据作进一步的统计,根据统计的数据对查找表进行配置。
下式为本实施例中判决函数的表达式:
其中,g(x)表示决策函数,n表示训练样本的数量,αi表示拉格朗日乘子,yi表示训练样本的标签,幂函数表示径向基核函数;指数部分-γ||xi-x||2分为第一部分γ和第二部分||xi-x||2,第一部分是常数因子,第二部分是两个向量差的模的平方。
本实施例中,预测模块204用于通过查找表的方式实现径向基核函数时,预测模块204用于确定径向基核函数中指数部分的范围和精度,计算所有需要输入的指数的个数,计算所有的指数输入,计算所有指数函数的输出结果,对输出结果进行归一化,对归一化的输出结果进行定点化。
本实施例中,指数的第二部分的范围在[0,512),小数部分用2bit表示就能够满足精度要求,由于γ因子较小,指数函数运算出的结果的范围在[0,1],因此设置基为0,也就是不需要进行归一化。如果运算出的结果不在[0,1],可以通过下式来确定合适的基。
其方法是找到指数函数也就是分子的最大值,通过选择合适的N使得所有值均在[0,1]。
计算输入的个数是指计算所有需要输入的指数的个数ElemNum,其计算方法通过下式得出。
ElemNum=(TabMax-TabMin)<<TabPreci
ElemNum与第二部分的最大值、最小值、小数部分的比特位数有关。在本实施例中,ElemNum为2048个。查找表的大小可以通过ElemNum和输出的位数来确定,本实施例中指定输出的精度为16比特,则查找表的大小为2048*16比特,也即4KB。这一数值在分配内存时需要用到。
预测模块204用于计算输入和计算输出并处理时,首先在内存空间中分配一片连续的区域用于存放指数函数的输出结果。查找表的大小与输入的个数和输出的位数有关,在上述步骤中已计算得到。
预测模块204还用于初始化指针ptr,以指向该内存空间的首地址,用于存放输出值。ptr指向单元的大小为输出的位宽,也即16比特。同时初始化计数器i用于对输入的个数进行计数,每计算完一个输出,计数器加一。计数器的值还用于辅助计算当前输入。
预测模块204还用于计算当前输入,指计算指数函数的指数的第二部分。计算方法如下:
ExpIn=TabMin+(float)i/(1<<TabInPreci)
此处用到了上述计数器的当前值。输入的精度TabInPreci决定了第二部分连续两个输入差值。精度越高,差值越小,查表的结果就越精确。在本实施例中,设置的输入精度TabInPreci为2,那么第二部分以1>>2,也即0.25递增。
预测模块204还用于计算当前输出,指计算指数函数的值。计算方法如下:
ExpOut=exp(-gamma*ExpIn)
直接使用系统指数函数,根据上面的公式,指数部分输入是当前输入与-γ的乘积。在本实施例中,前3个表中原始数据为e-γ*0、e-γ*0.25、e-γ*0.50。
预测模块204还用于对输出结果进行归一化和定点化处理。
为了便于在硬件里存储和运算,需要将上面的原始数据进行归一化和定点化,方法如下:
ExpOut=(exp(-gamma*ExpIn)/(1<<N))*(1<<15)
对数据归一化就是将原数据统一除以一个相同的基1<<N,使得所有查找表的数据在归一化后的范围在[0,1]。
由于已经对数据进行了归一化,因此整数部分最多需要1比特就能表示,规定对输出采用16比特表示,因而需要将归一化后的数据进行定点化处理,将数据整体左移15比特并取整,舍弃多余的小数位。
预测模块204还用于最后判断是否当前处理的数据是最后一个,如果不是那么继续处理并且将指针移动到下一单元。如果全部处理完毕则结束。
本实施例提供的基于数据压缩表示的支持向量机快速实现装置,能充分利用径向基核函数识别精度高的特点,同时使用查找表实现的方式规避其运算速度慢的缺点,使得支持向量机识别既快速又精确。其次,本实施例充分利用支持向量数据的特点,有效降低了支持向量的存储空间。
本领域技术人员可以理解,上述实施方式中各种方法的全部或部分步骤可以通过程序来指令相关硬件完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器、随机存取存储器、磁盘或光盘等。
以上内容是结合具体的实施方式对本申请所作的进一步详细说明,不能认定本申请的具体实施只局限于这些说明。对于本申请所属技术领域的普通技术人员来说,在不脱离本申请发明构思的前提下,还可以做出若干简单推演或替换。
Claims (10)
1.一种基于数据压缩表示的支持向量机快速实现方法,其特征在于,包括:
制作训练样本;
对训练样本进行训练,以得到模型数据;
将模型数据中的每个支持向量分量以24比特大小保存在内存中;
根据所述模型数据预测识别目标所属的类别,得到预测结果。
2.如权利要求1所述的方法,其特征在于,将模型数据中的每个支持向量分量以24比特大小保存在内存中,包括:将每个支持向量分量的整数部分以8比特表示,小数部分以16比特表示。
3.如权利要求2所述的方法,其特征在于,将模型数据中的每个支持向量分量以24比特大小保存在内存中,包括:将模型数据中的每个支持向量左移16位并取整,以得到24比特大小的数据。
4.如权利要求3所述的方法,其特征在于,将模型数据中的每个支持向量分量以24比特大小保存在内存中,包括:
先存入数据的低8比特;
将数据右移8位再存入低8比特;
将数据右移8位再存入低8比特。
5.如权利要求1所述的方法,其特征在于,还包括在将模型数据进行保存之前,分配一片连续的内存区域。
6.如权利要求1所述的方法,其特征在于,还包括将支持向量分量进行保存之前,先判断支持向量的整数部分是否在[-128,127]之间,如果否,则将该支持向量分量以32比特大小保存在内存中。
7.如权利要求1至6中任意一项所述的方法,其特征在于,根据所述模型数据预测识别目标所属的类别,得到预测结果,包括:预测过程中的判决函数采用径向基核函数,所述径向基核函数通过查找表的方式实现。
8.如权利要求7所述的方法,其特征在于,所述判决函数如下:
其中,g(x)表示决策函数,n表示训练样本的数量,αi表示拉格朗日乘子,yi表示训练样本的标签,幂函数表示径向基核函数;指数部分-γ||xi-x||2分为第一部分γ和第二部分||xi-x||2,第一部分是常数因子,第二部分是两个向量差的模的平方。
9.如权利要求8所述的方法,其特征在于,通过查找表的方式实现所述径向基核函数的步骤包括:
确定径向基核函数中指数部分的范围和精度;
计算所有需要输入的指数的个数;
计算所有的指数输入;
计算所有指数函数的输出结果;
对所述输出结果进行归一化;
对归一化的输出结果进行定点化。
10.一种基于数据压缩表示的支持向量机快速实现装置,其特征在于,包括:
样本制作模块,用于制作训练样本;
训练模块,用于对训练样本进行训练,以得到模型数据;
保存模块,用于将模型数据中的每个支持向量分量以24比特大小保存在内存中;
预测模块,用于根据所述模型数据预测识别目标所属的类别,得到预测结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710007829.8A CN106845534B (zh) | 2017-01-05 | 2017-01-05 | 一种基于数据压缩表示的支持向量机快速实现方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710007829.8A CN106845534B (zh) | 2017-01-05 | 2017-01-05 | 一种基于数据压缩表示的支持向量机快速实现方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106845534A true CN106845534A (zh) | 2017-06-13 |
CN106845534B CN106845534B (zh) | 2021-05-28 |
Family
ID=59117064
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710007829.8A Active CN106845534B (zh) | 2017-01-05 | 2017-01-05 | 一种基于数据压缩表示的支持向量机快速实现方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106845534B (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102522999A (zh) * | 2011-12-09 | 2012-06-27 | 电子科技大学 | 一种三维声波测井数据的实时压缩方法 |
CN105389593A (zh) * | 2015-11-16 | 2016-03-09 | 上海交通大学 | 基于surf特征的图像物体识别方法 |
-
2017
- 2017-01-05 CN CN201710007829.8A patent/CN106845534B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102522999A (zh) * | 2011-12-09 | 2012-06-27 | 电子科技大学 | 一种三维声波测井数据的实时压缩方法 |
CN105389593A (zh) * | 2015-11-16 | 2016-03-09 | 上海交通大学 | 基于surf特征的图像物体识别方法 |
Non-Patent Citations (3)
Title |
---|
"宇宙無窮 盈虚有数": "数字压缩算法 ZigZag", 《HTTPS://HEBL.CHINA-VO.ORG/W/19539684》 * |
LIANGKAIYANG: "LCD驱动舍弃RGB位数的编程问题", 《CSDN》 * |
PETER LINDSTROM等: "Fast and Efficient Compression of Floating-Point Data", 《IEEE TRANSACTIONS ON VISUALIZATION AND COMPUTER GRAPHICS》 * |
Also Published As
Publication number | Publication date |
---|---|
CN106845534B (zh) | 2021-05-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110163234B (zh) | 一种模型训练方法、装置和存储介质 | |
WO2019157946A1 (zh) | 一种反洗钱方法、装置及设备 | |
CN109741318B (zh) | 基于有效感受野的单阶段多尺度特定目标的实时检测方法 | |
CN109948149B (zh) | 一种文本分类方法及装置 | |
WO2019179403A1 (zh) | 基于序列宽深学习的欺诈交易检测方法 | |
CN104685540B (zh) | 图像语义分割的方法和装置 | |
CN104915972A (zh) | 图像处理装置、图像处理方法以及程序 | |
CN107391545A (zh) | 一种对用户进行分类的方法、输入方法及装置 | |
CN109635825A (zh) | 车辆属性检测方法、装置及存储介质 | |
CN106779050A (zh) | 一种卷积神经网络的优化方法和装置 | |
CN110007959A (zh) | 用于深度神经网络的硬件实现的层次化尾数位长度选择 | |
CN109948680A (zh) | 病历数据的分类方法及系统 | |
Yao et al. | Real-time method for traffic sign detection and recognition based on YOLOv3-tiny with multiscale feature extraction | |
CN107315984A (zh) | 一种行人检索的方法及装置 | |
CN111178196B (zh) | 一种细胞分类的方法、装置及设备 | |
CN108108769A (zh) | 一种数据的分类方法、装置及存储介质 | |
Songfeng et al. | Unsupervised clustering based reduced support vector machines | |
Liang et al. | A supervised figure-ground segmentation method using genetic programming | |
Gao et al. | An improved XGBoost based on weighted column subsampling for object classification | |
Vargas et al. | Relu-based activations: Analysis and experimental study for deep learning | |
CN114187465A (zh) | 分类模型的训练方法、装置、电子设备及存储介质 | |
CN111679959A (zh) | 计算机性能数据确定方法、装置、计算机设备及存储介质 | |
US20230029163A1 (en) | Wafer map analysis system using neural network and method of analyzing wafer map using the same | |
CN116380438A (zh) | 一种故障诊断方法、装置、电子设备及存储介质 | |
CN106845534A (zh) | 一种基于数据压缩表示的支持向量机快速实现方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |