gpt4 book ai didi

c++ - 如何加载以前存储的 svm 分类器?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:23:01 25 4
gpt4 key购买 nike

我在 Visual Studio 中使用 openCV SVM。 (OpenCV 2.4.4.0)

我训练它:

mySVM.train(trainingDataMat, labelsMat, Mat(), Mat(), params);

已保存:

mySVM.save("classifier.xml");

我是这样加载的:

CvSVM mySVM1;
mySVM1.load("C:\classifier.xml");
mySVM1.predict(testingDataMat0,result0);

我想在其他项目中使用。但是当我尝试加载分类器时,这个错误总是会出现:

"Bad argument (The SVM should be trained first) in CvSVM::predict"

路径正确,.xml 似乎正确存储。

有谁知道我做错了什么或者问题出在哪里?

分类器.xml:

<?xml version="1.0"?>
<opencv_storage>
<my_svm type_id="opencv-ml-svm">
<svm_type>C_SVC</svm_type>
<kernel><type>RBF</type>
<gamma>5.0625000000000009e-001</gamma></kernel>
<C>2.5000000000000000e+000</C>
<term_criteria><epsilon>2.2204460492503131e-016</epsilon>
<iterations>100</iterations></term_criteria>
<var_all>3</var_all>
<var_count>3</var_count>
<class_count>2</class_count>
<class_labels type_id="opencv-matrix">
<rows>1</rows>
<cols>2</cols>
<dt>i</dt>
<data>
-1 1</data></class_labels>
<sv_total>10</sv_total>
<support_vectors>
<_>
9.09866020e-002 5.56291997e-001 2.43510995e-002</_>
<_>
9.46519971e-001 2.94328004e-001 2.08841003e-002</_>
<_>
1. 3.68389994e-001 1.15272999e-002</_>
<_>
9.41470027e-001 3.73109013e-001 1.25126000e-002</_>
<_>
1. 2.23776996e-001 9.57737025e-003</_>
<_>
4.68845010e-001 3.62690985e-002 9.11400989e-002</_>
<_>
7.98106015e-001 2.73550004e-002 9.26491022e-002</_>
<_>
7.02144980e-001 3.98130007e-002 9.00894031e-002</_>
<_>
4.99359012e-001 4.31513004e-002 8.61563012e-002</_>
<_>
7.39947975e-001 4.39946018e-002 9.60593969e-002</_></support_vectors>
<decision_functions>
<_>
<sv_count>10</sv_count>
<rho>-5.7845965027809154e-001</rho>
<alpha>
2.5000000000000000e+000 2.5000000000000000e+000
1.4641912158132706e+000 2.5000000000000000e+000
2.5000000000000000e+000 -1.4641912158132708e+000
-2.5000000000000000e+000 -2.5000000000000000e+000
-2.5000000000000000e+000 -2.5000000000000000e+000</alpha>
<index>
0 1 2 3 4 5 6 7 8 9</index></_></decision_functions></my_svm>
</opencv_storage>

最佳答案

我遇到了这个问题,发现在 SVM 代码中,至少在 OpenCV 中,预测函数使用与训练函数相同的内核来确定输入类。因此,当您单独运行 predict 时,它不知道应该使用哪种内核。所以,我认为恰好在预测功能之前运行训练功能是可以避免的。

关于c++ - 如何加载以前存储的 svm 分类器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24135372/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com