我正在构建一个使用LibSVM的Android NDK应用程序。我已经在XCode(包括C ++)
中为我的mac构建了一个等价物我发现Mac可以处理我提供的极大特征向量,具有高速度和准确性(~16800个功能),用于训练和分类
在Android上(非常相似的代码)我可以成功地训练/学习150个功能,但是当我尝试完整的16800功能时,我得到以下段错误(即使它在Mac上运行良好)。只有分类(svm_predict
但是。训练总是正常。
你可以看到" dot" LibSVM使用的函数
0-16 23:28:41.084 30997-31028/? A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0xaf000000 in tid 31028 (GLThread 17147)
10-16 23:28:41.190 27393-27393/? I/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
10-16 23:28:41.191 27393-27393/? I/DEBUG: Build fingerprint: 'google/hammerhead/hammerhead:5.1.1/LMY48M/2167285:user/release-keys'
10-16 23:28:41.191 27393-27393/? I/DEBUG: Revision: '11'
10-16 23:28:41.191 27393-27393/? I/DEBUG: ABI: 'arm'
10-16 23:28:41.191 27393-27393/? I/DEBUG: pid: 30997, tid: 31028, name: GLThread 17147 >>> cc.openframeworks.androidEmptyExample <<<
10-16 23:28:41.191 27393-27393/? I/DEBUG: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0xaf000000
10-16 23:28:41.202 27393-27393/? I/DEBUG: r0 aef3e000 r1 aef5ed10 r2 00000001 r3 af000000
10-16 23:28:41.202 27393-27393/? I/DEBUG: r4 aec29eb8 r5 00000001 r6 b4b2c608 r7 12d090c0
10-16 23:28:41.202 27393-27393/? I/DEBUG: r8 12d15660 r9 b4a39400 sl 00000000 fp af37d824
10-16 23:28:41.202 27393-27393/? I/DEBUG: ip b6e417dc sp af37d810 lr a301ff78 pc a301ff04 cpsr 000f0010
10-16 23:28:41.202 27393-27393/? I/DEBUG: #00 pc 00167f04 /data/app/cc.openframeworks.androidEmptyExample-1/lib/arm/libOFAndroidApp.so (Kernel::dot(svm_node const*, svm_node const*)+192)
关于这里发生了什么的任何想法?
我使用以下参数:
mSvm.setSvmType(C_SVC);
mSvm.setKernelType(LINEAR);
mSvm.setCost(1);
mSvm.setGamma(1/16800);
mSvm.setCoef0(0);
mSvm.setCachesize(40);
mSvm.setEpsilon(0.001);
mSvm.setShrinking(false);
mSvm.setDegree(1);
mSvm.setNu(0.5);
答案 0 :(得分:1)
您似乎是根据以下一行从LIBSVM的点积运算中得到错误:
10-16 23:28:41.202 27393-27393 /? I / DEBUG:#00 pc 00167f04 /data/app/cc.openframeworks.androidEmptyExample-1/lib/arm/libOFAndroidApp.so(Kernel :: dot(svm_node const *,svm_node const *)+ 192)
这个例程经常被大量用户疯狂地测试,因此我怀疑错误在那里。
您是否100%确定您的指针有效?您是否有可能在mac版本上碰巧遇到未定义的行为?我的意思是,你提供的指针是否有可能在所有平台上始终无效,但恰好仍然适用于mac版本?当您在多个平台上工作时,这些错误会给人一种正常工作的错觉。
答案 1 :(得分:0)
我在'dot'函数中有一个类似的问题,我通过不将'0'作为svm_nodes的值来解决。该函数期望索引为-1且值为0来标记svm_nodes(训练向量)列表的末尾。
确定对您来说有点晚了,但希望它将对将来的libsvm用户有所帮助:)