как загрузить модель libsvm в java после изменения serialVersionUID

Я обучил модель libsvm на weka, а затем сохранил модель. Теперь я хочу использовать эту модель в java.

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

я получаю эту ошибку

"java.io.InvalidClassException: libsvm.svm_model; локальный класс несовместим: класс classdesc serialVersionUID = -8642637231196646922, локальный класс serialVersionUID = 2709444323471798245"

когда я запускаю код выше. Я хочу знать, как я могу загрузить и использовать модель.


person RockOnGom    schedule 19.03.2014    source источник
comment
Могу ли я узнать, как вы это решили?   -  person aceminer    schedule 19.11.2014


Ответы (2)


Скорее всего, вы изменили определение класса между моментом сохранения модели и моментом, когда вы пытаетесь ее загрузить (см., например, Что такое serialVersionUID и почему я должен его использовать? для хорошего объяснения). Думайте о serialVersionUID как о своего рода контрольной сумме, которая гарантирует, что вы не загрузите устаревшую версию своих классов. Если это то, что вам нужно, потому что вы знаете лучше, чем Java, что вы все еще можете использовать старые модели - в этом случае вы можете вручную установить этот идентификатор. Чтобы сообщить Java, что ваш текущий классификатор все еще актуален, добавьте

static final long serialVersionUID = -8642637231196646922;

к коду класса.

Однако теперь мне интересно: Classifier выглядит как встроенный класс Weka. Я не уверен, насколько легко можно изменить serialVersionUID в этом случае. Возможно, вы обновили версию Weka? Если вы действительно вложили средства в свой файл модели, вы можете зайти в исходный код Weka и изменить serialVersionUID прямо там.

person Nicolas78    schedule 12.05.2014

Не нужно возиться с serialVersionUID. Используйте SerializationHelper для сохранения/загрузки файлов модели LibSVM (как описано в этом другом ответе):

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

LibSVM svm = (LibSVM) weka.core.SerializationHelper.read("/some/where/svm.model");
person ruhong    schedule 18.02.2015