java - 如何在 serialVersionUID 更改后在 java 中加载 libsvm 模型

标签 java serialization weka libsvm serialversionuid

我已经在 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/

相关文章:

java - 使用两个线程和一个共享变量进行广播和应答

java - 从 Java 生成 Flex beans 和相关的序列化代码

C# Metro 序列化一个类?

data-mining - 如何在 WEKA 中设置参数以平衡数据与 SMOTE 过滤器?

java.security.AccessControlException : access denied in Java RMI Telephone Directory

java - 默认 Maven 插件版本是如何决定的?

java - 在同一对象中具有链接图像的 Firebase 实时数据库

c# - 使用 DataContractJsonSerializer 序列化 Dictionary<> 对象

Java Weka获取具有给定属性值的所有实例

machine-learning - Weka:匹配属性名称