在安卓模拟机上使用Chaquopy导入机器学习模型时报错如下:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.NCEPU, PID: 8256
com.chaquo.python.PyException: ValueError: Did not recognise loaded array layout
at <python>.sklearn.tree._tree.Tree.__setstate__(_tree.pyx:673)
at <python>.pickle.load_build(pickle.py:1703)
at <python>.joblib.numpy_pickle.load_build(numpy_pickle.py:329)
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/AdaBoost.test(AdaBoost.py:11)
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:76)
at com.example.NCEPU.Student.Predict.AdaBoostActivity.createList(AdaBoostActivity.java:227)
at com.example.NCEPU.Student.Predict.AdaBoostActivity.access$000(AdaBoostActivity.java:47)
at com.example.NCEPU.Student.Predict.AdaBoostActivity$1.lambda$run$0$AdaBoostActivity$1(AdaBoostActivity.java:106)
at com.example.NCEPU.Student.Predict.-$$Lambda$AdaBoostActivity$1$sgvbv3_UxspSzXcFCjxj0SVAhh0.run(Unknown Source:2)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
解决:
dump(clf, 'model.pkl', compress=3)
即加上compress参数。