2014-03-19 7 views
4

weka에서 libsvm 모델을 교육 한 다음 모델을 저장했습니다. 이제 java에서이 모델을 사용하고 싶습니다.serialVersionUID가 변경된 후 Java에서 libsvm 모델을로드하는 방법

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

이 오류를

얻을 "libsvm.svm_model, 지역 클래스 호환되지 않는 : java.io.InvalidClassException이 스트림 classdesc의의 serialVersionUID = -8642637231196646922, 지역 클래스의 serialVersionUID를 = 2709444323471798245"

위의 코드를 실행하면 모델을로드하고 사용할 수있는 방법을 알고 싶습니다.

+0

내가 당신이 그것을 해결 방법을 알 수 있습니까? – aceminer

답변

2

모델을 저장 한 시간과로드하려고 시도한 시간 사이에 클래스 정의가 변경되었을 가능성이 있습니다 (자세한 설명은 What is a serialVersionUID and why should I use it? 참조). serialVersionUID을 체크섬의 일종으로 생각하면 클래스의 오래된 버전을로드하지 않아도됩니다. 그것이 이전 모델을 계속 사용할 수 있다는 것을 Java보다 잘 알고 있기 때문에 원하는 것이 아니라면 수동으로 해당 ID를 설정할 수 있습니다. 현재 분류 ​​기준이 여전히 최신임을 Java에 알리려면 클래스 코드에

static final long serialVersionUID = -8642637231196646922; 

을 추가하십시오.

이제 Weuch : Classifier은 Weka 내장 클래스처럼 보입니다. 이 경우 serialVersionUID를 얼마나 쉽게 변경할 수 있는지 잘 모르겠습니다. Weka 버전을 업데이트 했니? 모델 파일에 실제로 투자했다면 Weka 소스 코드에 들어가서 serialVersionUID을 바꿀 수도 있습니다.

1

serialVersionUID를 사용하지 않아도됩니다. (이 other answer에 설명 된대로)/부하 LibSVM 모델 파일을 저장 SerializationHelper를 사용

weka.core.SerializationHelper.write("/some/where/svm.model", svmModel); 

LibSVM svm = (LibSVM) weka.core.SerializationHelper.read("/some/where/svm.model"); 
+0

확인 표시가 나타납니다. – Nicolas78