繁体   English   中英

如何在 Java 中解开与 C、C++ 和 Z23EEEB4347BDD255DDFC6B7EE9A3 链接的 class?

[英]How to unpickle a class that is linked with C,C++ and python in Java/Android?

我正在使用基于机器学习和统计的分类器,称为 EVM(极值机器),使用链接https://pypi.org/project/EVM/ 我在 python 中训练 model 并使用以下代码将其保存为泡菜文件。

import EVM
import pickle
mevm = EVM.MultipleEVM(tailsize=300, cover_threshold = 0.7, distance_multiplier = 0.7, distance_function = scipy.spatial.distance.euclidean)
mevm.train([trainX[i] for i in list(trainX.keys())])

#Save the trained model
with open('model.pkl','wb') as f:
  pickle.dump(mevm,f)

我可以使用相同的 Pickle 模块在 Python 中轻松加载相同的 model。 当我保存时,所有权重都保存在 pickle 文件中,我可以进行如下推断,

import pickle
import EVM
with open('model.pkl','rb') as b:
     mevm = pickle.load(b)
print("Probability of given input", mevm.max_probabilities([embeds[i]]))

但我无法在 Android/Java 中读取相同的泡菜文件(我想在我的 android 应用程序中使用这个保存的 model)。 当我检查 EVM class 时,有一个 C 文件和一个使用“.pyx”文件连接的 C++ 文件。 所有这 3 个文件都是使用 python EVM(即导入 EVM)class 读取的。 请参阅以下链接以获取文件https://pypi.org/project/EVM/#files

我的问题是

  1. 如何在 Android/Java 中读取此已保存的 model?
  2. 由于这与 C,C++ 和 python 相关联,是否可以读取 ZD52387880E379EA2213817A722?
  3. 还有其他更好的方法来保存它,以便我可以使用它 Andriod/Java?

任何线索表示赞赏。

提前致谢:)

根据此处的 python 文档

pickle 模块实现了用于序列化和反序列化 Python object 结构的二进制协议。 “Pickling” is the process whereby a Python object hierarchy is converted into a byte stream, and “unpickling” is the inverse operation, whereby a byte stream (from a binary file or bytes-like object) is converted back into an object hierarchy. 酸洗(和解酸)也称为“序列化”、“编组”、1 或“扁平化”; 但是,为避免混淆,此处使用的术语是“酸洗”和“解酸”

这意味着给定字节 stream 仅在 Python 中在语法上有效,除非您想编写 object 转译器。

你以错误的方式处理你的问题。 ML model 只是一组系数/参数,您已对其进行优化以获得目标变量的近似值。 您应该能够采用该组系数/参数并以任何语言使用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM