如何在 Weka-for-Android 中反序列化保存的模型
Posted
技术标签:
【中文标题】如何在 Weka-for-Android 中反序列化保存的模型【英文标题】:How to deserialize saved model in Weka-for-Android 【发布时间】:2013-05-02 02:04:54 【问题描述】:我在从 sdcard 加载保存的模型时遇到问题。 在 Weka 的官方 wiki 中,我发现了 2 种反序列化模型的方法,但它们都不适用于 android。
//First Method
RandomForest rf = (RandomForest) weka.core.SerializationHelper.
read(Environment.getExternalStorageDirectory().getPath() + "/BC.model");
//Second Method
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(
Environment.getExternalStorageDirectory().getPath() + "/BC.model"));
RandomForest rf = new RandomForest();
rf = (RandomForest) ois.readObject();
我在 logcat 中收到此错误:
java.io.InvalidClassException:
weka.classifiers.trees.RandomForest; Incompatible class (SUID):
weka.classifiers.trees.RandomForest
【问题讨论】:
【参考方案1】: InputStream is = this.getAssets().open("example.model");
ObjectInputStream ois = new ObjectInputStream(is);
cls = (Classifier) ois.readObject();
ois.close();
您可能希望将模型放在资产文件夹中。请让我知道它是否有效。
【讨论】:
感谢亨利的回复 :) 问题不在于我是否找到模型文件,我认为问题在于将 ios.readObect 转换为 RandomForest。我尝试将其放入资产中,但没有任何改变。【参考方案2】:在android中,您只能加载由您的android APP序列化的分类器模型。否则,由于不兼容的 Serializable UID,您将收到异常。
【讨论】:
以上是关于如何在 Weka-for-Android 中反序列化保存的模型的主要内容,如果未能解决你的问题,请参考以下文章