移植 Java 对象,包括状态(经过训练的 LIBSVM)
Porting Java object including state (trained LIBSVM)
这几乎可以应用于任何 Java 对象,但我在机器学习的上下文中询问,特别是 libsvm。我有一个 SVM 在一个实时 Java 系统上训练。有没有办法让系统保存此类对象的状态并将经过训练的对象移动到不同的 Java 系统?
谢谢。
是的,有几种方法。最简单的方法是使用 ObjectOutputStream
:
像这样序列化经过训练的 svm_model
import java.io.*;
public class SerializeSVMModel {
public static void main(String [] args) {
// Set up your SVM model
svm_model model = svm_train(...);
// ...
try {
FileOutputStream fileOutputStream = new FileOutputStream("c:/svm/serialized_svm_model.ser");
ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream );
// Writes the object
objectOutputStream .writeObject(model );
} catch(IOException e) {
e.printStackTrace();
} finally {
if (objectOutputStream != null) {
objectOutputStream.close();
}
}
}
}
要反序列化 model
,您可以使用 ObjectInputStream
。
另一种方法是使用Java Architecture for XML Binding (JAXB)。在这种情况下,您需要编写一个包装器 class 才能访问 svm_model
的字段,因为您需要用注释来标记它们。这种方法更好,因为您有人类可读的 XML 输出文件或其他自定义格式。但是,您需要为此进行大量进一步阅读。
这几乎可以应用于任何 Java 对象,但我在机器学习的上下文中询问,特别是 libsvm。我有一个 SVM 在一个实时 Java 系统上训练。有没有办法让系统保存此类对象的状态并将经过训练的对象移动到不同的 Java 系统?
谢谢。
是的,有几种方法。最简单的方法是使用 ObjectOutputStream
:
svm_model
import java.io.*;
public class SerializeSVMModel {
public static void main(String [] args) {
// Set up your SVM model
svm_model model = svm_train(...);
// ...
try {
FileOutputStream fileOutputStream = new FileOutputStream("c:/svm/serialized_svm_model.ser");
ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream );
// Writes the object
objectOutputStream .writeObject(model );
} catch(IOException e) {
e.printStackTrace();
} finally {
if (objectOutputStream != null) {
objectOutputStream.close();
}
}
}
}
要反序列化 model
,您可以使用 ObjectInputStream
。
另一种方法是使用Java Architecture for XML Binding (JAXB)。在这种情况下,您需要编写一个包装器 class 才能访问 svm_model
的字段,因为您需要用注释来标记它们。这种方法更好,因为您有人类可读的 XML 输出文件或其他自定义格式。但是,您需要为此进行大量进一步阅读。