Chaquopy中不能导入64位Python训练的机器学习模型(32bit与64bit不兼容)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Chaquopy中不能导入64位Python训练的机器学习模型(32bit与64bit不兼容),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3254字,纯文字阅读大概需要5分钟。
内容图文
![Chaquopy中不能导入64位Python训练的机器学习模型(32bit与64bit不兼容)](/upload/InfoBanner/zyjiaocheng/602/b642d2c6919647bdb6818652c90471b1.jpg)
??我在Chaquopy中利用joblib来load一个在pycharm中写好的AdaBoost模型:
from joblib import dump, load
filename = join(dirname(__file__), 'gao1_to_gao2_1.pkl')
clf = load(filename)
??报错如下:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.NCEPU, PID: 18024
com.chaquo.python.PyException: ValueError: Buffer dtype mismatch, expected 'SIZE_t' but got 'long long'
at <python>.sklearn.tree._tree.Tree.__cinit__(_tree.pyx:607)
at <python>.pickle.load_reduce(pickle.py:1587)
at <python>.pickle.load(pickle.py:1210)
at <python>.joblib.numpy_pickle._unpickle(numpy_pickle.py:504)
at <python>.joblib.numpy_pickle.load(numpy_pickle.py:585)
at <python>.AdaBoost.test(AdaBoost.py:76)
at <python>.chaquopy_java.call(chaquopy_java.pyx:380)
at <python>.chaquopy_java.Java_com_chaquo_python_PyObject_callAttrThrowsNative(chaquopy_java.pyx:352)
at com.chaquo.python.PyObject.callAttrThrowsNative(Native Method)
at com.chaquo.python.PyObject.callAttrThrows(PyObject.java:232)
at com.chaquo.python.PyObject.callAttr(PyObject.java:221)
at com.example.NCEPU.Student.Predict.AdaBoostActivity.callPythonCode(AdaBoostActivity.java:45)
at com.example.NCEPU.Student.Predict.AdaBoostActivity.createList(AdaBoostActivity.java:61)
at com.example.NCEPU.Student.Predict.AdaBoostActivity.lambda$initViews$1$AdaBoostActivity(AdaBoostActivity.java:56)
at com.example.NCEPU.Student.Predict.-$$Lambda$AdaBoostActivity$dJAvP4dDDrPleKcJgBCESW0ea0M.onClick(Unknown Source:2)
at android.view.View.performClick(View.java:7192)
at android.view.View.performClickInternal(View.java:7166)
at android.view.View.access$3500(View.java:824)
at android.view.View$PerformClick.run(View.java:27592)
at android.os.Handler.handleCallback(Handler.java:888)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:213)
at android.app.ActivityThread.main(ActivityThread.java:8169)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1101)
??翻遍stackoverflow发现是因为32位Python不能导入64位训练的模型,于是在Chaquopy中输出一下:
import platform
print(platform.architecture())
输出为:
('32bit', 'WindowsPE')
??果然,Chaquopy中Python默认是32位。那没办法,只能用32位Python训练模型然后再导入了。
1.安装32位python
??在官网下载32位的python38,然后安装,这个不再叙述。
??安装后在Pycharm上配置:
??这个时候在pycharm上打印:
import platform
print(platform.architecture())
??输出为:
('32bit', 'WindowsPE')
??可以看到当前版本已经是32位了
2.安装skleanr和pandas
??直接在pycharm的Terminal中安装:
pip install sklearn -i https://pypi.douban.com/simple
pip install pandas -i https://pypi.douban.com/simple
??安装过程有极大概率会报错,这中间省略了很多细节。。。。因为问题实在太多了,忘记记录了。不过最后是升级了一下pip就OK了。
3.训练模型并保存
这一步是在pycharm中进行的:
clf = AdaBoostClassifier(base_estimator=DecisionTreeClassifier(max_depth=7, min_samples_leaf=5),
n_estimators=200,
algorithm='SAMME', learning_rate=0.5)
clf = clf.fit(train_x, train_y) # 训练模型
dump(clf, 'gao1_to_gao2_1.pkl')
4.Chaquopy中加载模型
??gao1_to_gao2_1.pkl放在python文件夹下:
from joblib import dump, load
filename = join(dirname(__file__), 'gao1_to_gao2_1.pkl')
clf = load(filename)
内容总结
以上是互联网集市为您收集整理的Chaquopy中不能导入64位Python训练的机器学习模型(32bit与64bit不兼容)全部内容,希望文章能够帮你解决Chaquopy中不能导入64位Python训练的机器学习模型(32bit与64bit不兼容)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。