我已经在 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;
类的代码。
现在我想知道:Classifier
看起来像一个 Weka 内置类。我不确定在这种情况下更改 serialVersionUID 有多容易。您是否更新了 Weka 版本?如果您真的对模型文件投入了精力,您可能想进入 Weka 的源代码并更改那里的 serialVersionUID
。
关于java - 如何在 serialVersionUID 更改后在 java 中加载 libsvm 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22508869/