Ядро Jupyter умирает с помощью coremltools для больших деревьев решений - PullRequest
0 голосов
/ 05 июля 2018

Я обучил модель с использованием DecisionTreeClassifier scikit-learn для набора данных с> 3 000 000 строк и 15 функциями (двоичное кодирование категорий). Он работает хорошо и выполняет то, что я хочу. Когда я пытаюсь преобразовать его в модель CoreML, он не работает. Я получаю «Ядро, кажется, умерло. Оно автоматически перезапустится». Я сократил размер своих данных, и для действительно небольших партий он работает нормально. Кажется, он разбил около 500 строк.

Я новичок в использовании CoreML, и это может быть неправильное понимание того, как он работает, но я не уверен. Я чувствую, что учитывая его назначение, CoreML должен быть в состоянии обрабатывать большие модели с большим количеством меток классов (я смотрю около 40 000).

Есть идеи, как решить эту проблему или обойти ее?

Упрощенное представление о том, что я делаю:

import pandas as pd
import numpy as np
import sklearn
import coremltools
import random
import string
from sklearn.tree import DecisionTreeClassifier 

X = np.random.choice([0, 1], size=(15*1000,), p=[1./3, 2./3])
X = np.split(X,1000)

y = []
for i in range(0,1000):
    x = ''.join(random.choice(string.lowercase) for x in range(5))
    y.append(x)

clf = DecisionTreeClassifier()
clf.fit(X,y)

d = {'arr': X, 'str': y}
df = pd.DataFrame(data=d)

coreml_model = coremltools.converters.sklearn.convert(clf, "arr", 
    "str") ## kernel dies here for larger data
coreml_model.save('mymodel.mlmodel') 

Обновление: Это проблема с памятью (вероятно). Как только я пройду около 2 МБ, я получу

malloc: *** error for object 0x7fb096a0f738: incorrect checksum for freed object - object was probably modified after being freed. *** set a breakpoint in malloc_error_break to debug

Отладка просто дает

Segmentation fault: 11

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...