如何在serialVersionUID发生变化后在java中加载libsvm模型

我在weka上训练了libsvm模型,然后我保存了模型.现在我想在java中使用这个模型.

Classifier cls = (Classifier)weka.core.SerializationHelper.read(this.modelPath);

我收到这个错误

“java.io.InvalidClassException: libsvm.svm_model; local class
incompatible: stream classdesc serialVersionUID =
-8642637231196646922, local class serialVersionUID = 2709444323471798245”

当我运行上面的代码.我想知道如何加载和使用模型.

解决方法:

您可能在保存模型的时间和尝试加载模型的时间之间更改了类定义(例如,请参阅What is a serialVersionUID and why should I use it?以获得详细说明).将serialVersionUID视为一种校验和,确保您不会加载过时的类版本.除非那是你想要的,因为你比Java更了解你仍然可以使用旧模型 – 在这种情况下你可以手动设置该ID.为了告诉Java您当前的分类器仍然是最新的,请添加

static final long serialVersionUID = -8642637231196646922;

到班级的代码.

现在我想知道:分类器看起来像Weka内置类.我不确定在这种情况下可以轻松更改serialVersionUID.你有没有更新Weka版本?如果你真的投资了你的模型文件,你可能想进入Weka的源代码并在那里更改serialVersionUID.

上一篇:将PMML中的SVM模型导入Java或Python?


下一篇:python – scikit-learn OpenMP libsvm