libsvm的版本引出的问题

来源:互联网 发布:js判断文字是否被复制 编辑:程序博客网 时间:2024/05/14 14:50

最近在matlab下运行关于svm的一些程序,而选用的libsvm包来使用。


1. 错误一 mexa64与mexw64

刚开始运行时,没怎么注意文件夹下的svm的mex文件,运行则报错。根据错误提示位置,点击进入了一个svmtrain文件,发现居然是matlab自带svm程序,居然没有调用文件夹下的mex文件。


跑去看mex文件,发现其后缀是mexa64,

svmtrain.mexa64

svmpredict.mexa64

后缀mexa64的mex文件是供64位Linux下的matlab调用的,而64位window应该是使用后缀mexw64的mex文件。

因为我是在64位window服务器上运行,故在工作文件夹下找不到对应的mex文件,而跑去找matlab的相应函数,结果参数又对不上,故提示错误位置为matlab下的相应文件。


2. 错误二 历史版本与最新版本

因为工作目录下没有mexw64的文件,我便从自己电脑上copy了两个文件到工作目录下,而自己电脑上的libsvm是刚装不久,下载的最新版本。

svmtrain.mexw64

svmpredict.mexw64

用最新版本成功运行程序成功,但最后的结果与原来的结果有很小差别,突然想到有可能是libsvm版本差异,因而又在其他服器上找到了当时使用的libsvm(2009年的。。。),训练预测也成功运行。

后来,为了验证一个修改后的程序,便直接使用训练好的模型进行预测,但提示

Error: can't read model: number of return field is not correct

单步调试跟踪,发现svmpredict函数参数都是正确的,但总是没有返回值,很是纳闷。怀疑可能是修改后的程序存在bug,换原来的程序结果还是提示同样错误。。。

跑去看训练好的model,突然反应过来,这模型是先使用最新版本的svm训练的,而预测时换成了2009年的svm,老版本不能兼容新版本的model格式,故不能读取model。


主要还是粗心,以后得注意程序包的版本兼容问题。