在CMamke生成的VS项目中插入程序

  1. 在主文件夹的CMakeLists.tex中加入SET(COMPILE_WITH_LSVM OFF CACHE BOOL "Compile with LSVM")
    在这里插入图片描述
    再添加IF(COMPILE_WITH_LSVM) MESSAGE("Compiling with: LSVM") ADD_DEFINITIONS(-DCOMPILE_WITH_LSVM) ADD_SUBDIRECTORY(LSVM) LIST(APPEND SRC LSVM_wrapper.h LSVM_wrapper.cpp) ENDIF()

请添加图片描述
之后再按CMake添加程序
把该加的都加进主文件夹和子文件夹中的CMakeLists.tex里
都加好之后再用Cmake congfigure就会出现我们新加的程序,在value列上打上对号,再congfigure
在这里插入图片描述

  1. 在VS中添加
    一个头文件:LSVM_wrapper.h
#pragma once#include "svm_template.h"class LSVMData : public SvmData
{
public:int Load(char *filename, SVM_FILE_TYPE file_type, SVM_DATA_TYPE data_type);
};class LSVMModel : public SvmModel
{
public:int Train(SvmData *data, struct svm_params * params, struct svm_trainingInfo *trainingInfo);int StoreModel(char *model_file_name, SVM_MODEL_FILE_TYPE type);
};

和一个源文件:LSVM_wrapper.cpp

#include "ohdSVM_wrapper.h"
#include "OHD-SVM/ohdSVM.h"
#include "utils.h"
#include <string>extern int g_ws_size;
extern std::string g_imp_spec_arg;int ohdSVMData::Load(char *filename, SVM_FILE_TYPE file_type, SVM_DATA_TYPE data_type)
{svm_memory_dataformat req_data_format;req_data_format.allocate_pinned = false;req_data_format.allocate_write_combined = false;req_data_format.dimAlignment = 32;req_data_format.vectAlignment = 32;req_data_format.transposed = false;req_data_format.labelsInFloat = true;req_data_format.supported_types = SUPPORTED_FORMAT_DENSE | SUPPORTED_FORMAT_CSR;  //no sparse yetSAFE_CALL(SvmData::Load(filename, file_type, data_type, &req_data_format));//filename=argv[1]=a9a.txt,file_type = LASVM_BINARYreturn SUCCESS;
}int ohdSVMModel::Train(SvmData *data, struct svm_params * params, struct svm_trainingInfo *trainingInfo)
{this->data = data;this->params = params;alphas = (float *)malloc(data->GetNumVects() * sizeof(float));float rho = 0;try{size_t pos = g_imp_spec_arg.find(',');if (pos != std::string::npos){int sliceSize = atoi(g_imp_spec_arg.c_str());int threadsPerRow = atoi(g_imp_spec_arg.c_str() + pos + 1);ohdSVM::useEllRT(true, sliceSize, threadsPerRow);}bool is_sparse = data->GetDataType() == SVM_DATA_TYPE::SPARSE;ohdSVM::Data x;if (is_sparse)x.sparse = (ohdSVM::csr *)data->GetDataSparsePointer();elsex.dense = data->GetDataDensePointer();ohdSVM::Train(alphas, &rho, is_sparse, x, (const float *)data->GetVectorLabelsPointer(),data->GetNumVects(), data->GetNumVectsAligned(),data->GetDimVects(), data->GetDimVectsAligned(),params->C, params->gamma, params->eps, g_ws_size);}catch (std::exception & e){std::cerr << "Exception in OHD-SVM: " << e.what() << std::endl;}params->rho = rho;SAFE_CALL(CalculateSupperVectorCounts());return SUCCESS;
}int ohdSVMModel::StoreModel(char *model_file_name, SVM_MODEL_FILE_TYPE type)
{return StoreModelGeneric(model_file_name, type);
}

请添加图片描述

  1. 在svm-train.cpp中加入
#ifdef COMPILE_WITH_LSVM
#include "LSVM_wrapper.h"
#endif

请添加图片描述
添加

	#ifdef COMPILE_WITH_LSVMcase 17:printf("Using LSVM...\n\n");data = new LSVMData;model = new LSVMModel;return SUCCESS;
#endif

在这里插入图片描述

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

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

相关文章

3.解构赋值

解构赋值是一种快速为变量赋值的简洁语法&#xff0c;本质上仍然是为变量赋值。 3.1数组解构 数组解构是 将数组的单元值快速批量赋值给一系列变量 的简洁语法 1.基本语法: &#xff08;1&#xff09;赋值运算符左侧的[ ]用于批量声明变量&#xff0c;右侧数组的单元值将被赋…

《Zookeeper》源码分析(九)之选举通信网络

在上一篇文章中讲到QuorumCnxManager&#xff0c;它负责zookeeper服务器在选举期间最底层的网络通信&#xff0c;整个网络涉及到的类如下&#xff1a; 整个网络建立的过程如下&#xff1a; 选举前创建好QuorumCnxManager实例&#xff0c;并在QuorumCnxManager构造函数中创建好…

【Linux操作系统】深入理解Linux系统编程中的传入参数、传出参数和传入传出参数

在Linux系统编程中&#xff0c;函数的参数扮演着至关重要的角色。参数的传递方式可以分为传入参数、传出参数和传入传出参数。本文将详细解释这三种参数的概念、特点以及如何使用它们来实现灵活和高效的函数调用和数据传递。 文章目录 1. 解释和举例1.1 传入参数&#xff08;i…

时序预测-Informer简介

Informer介绍 1. Transformer存在的问题 Informer实质是在Transformer的基础上进行改进&#xff0c;通过修改transformer的结构&#xff0c;提高transformer的速度。那么Transformer有什么样的缺点&#xff1a; &#xff08;1&#xff09;self-attention的平方复杂度。self-…

若依vue -【 100 ~ 更 ~ 110 】

100 主子表代码生成详解 1 新建数据库表结构&#xff08;主子表&#xff09; -- ---------------------------- -- 客户表 -- ---------------------------- drop table if exists sys_customer; create table sys_customer (customer_id bigint(20) not null…

Java线程调度以及算法

线程调度概况 Java的线程调度程序是JVM的一部分&#xff0c;它决定应该运行哪个线程。无法保证线程调度程序将选择运行哪个可运行线程。 一次只能有一个线程在一个进程中运行。线程调度程序主要使用抢占式或时间切片调度来调度线程。 抢占式调度与时间分片的区别 在抢占式调…

Vue3组件库

Vue组件库 ViteVue3TypescriptTSX 1、项目搭建 1.1、创建项目&#xff08;yarn&#xff09; D:\WebstromProject>yarn create vite yarn create v1.22.19 [1/4] Resolving packages... [2/4] Fetching packages... [3/4] Linking dependencies... [4/4] Building fresh pa…

1.2 初识输入输出

博主介绍&#xff1a;爱打游戏的计算机专业学生 博主主页&#xff1a;夏驰和徐策 所属专栏&#xff1a;夏驰和徐策带你从零开始学C 前言&#xff1a; C语言并未定义任何输入输出 (IO) 语句&#xff0c;取而代之&#xff0c;包 含了一个全面的标准库 (standard library) 来 提…

OpenCV基本操作——算数操作

目录 图像的加法图像的混合 图像的加法 两个图像应该具有相同的大小和类型&#xff0c;或者第二个图像可以是标量值 注意&#xff1a;OpenCV加法和Numpy加法之间存在差异。OpenCV的加法是饱和操作&#xff0c;而Numpy添加的是模运算 import numpy as np import cv2 as cv imp…

uniapp把城市换成26个字母和城市排序

后端返回的数据 我们要得效果 <template><view><view v-for"(value,key) in cities" :key"key"><view style"color: red;"> {{ key }} </view><view style"border: 1rpx solid black;"><tex…

记录--用css画扇形菜单

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 1、效果图 用手机录屏再用小程序转换的gif&#xff0c;可能精度上有点欠缺。 2、实现过程 1、观察及思考 开始编码前我们首先观察展开后的结构&#xff1a;两个四分之一的圆加三个圆形菜单项。 文章名…

使用GUI Guider工具开发嵌入式GUI应用 (2) - 在MCU上部署源码

使用GUI Guider工具开发嵌入式GUI应用 (2) - 在MCU上部署源码 文章目录 使用GUI Guider工具开发嵌入式GUI应用 (2) - 在MCU上部署源码引言创建LVGL基本MCU工程获取移植LVGL的源码工程通过bootloader使用外扩qspiflash存储大尺寸固件程序 创建LVGL应用源码在GUI Guider中创建新项…