[英]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
我的问题是
任何线索表示赞赏。
提前致谢:)
根据此处的 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.