Загрузить модель XGBoost в рамках django

Я пытаюсь загрузить модель xgboost из FileField объекта модели Django. Это не работает.

def do(execution):
    dataFile = execution.dataFile
    np = genfromtxt(dataFile, delimiter=',')

    import xgboost as xgb
    bst = xgb.Booster({'nthread': 4})  # init model
    # bst.load_model('testModel.bin') "Working when used instead of following line"
    bst.load_model(execution.modelFile)

    data = xgb.DMatrix(np)

    preds = bst.predict(data)

    print(preds)

Я получаю эту ошибку:

TypeError: memoryview: требуется байтовоподобный объект, а не 'FieldFile'

Полный след:

Traceback (most recent call last):
  File "/home/andrea/environments/new_env/lib/python3.5/site-packages/django/core/handlers/exception.py", line 35, in inner
    response = get_response(request)
  File "/home/andrea/environments/new_env/lib/python3.5/site-packages/django/core/handlers/base.py", line 128, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/home/andrea/environments/new_env/lib/python3.5/site-packages/django/core/handlers/base.py", line 126, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/andrea/Documents/python/DataProject/DataProject/views.py", line 19, in run
    ModelService.do(e)
  File "/home/andrea/Documents/python/DataProject/executions/ModelService.py", line 10, in do
    bst.load_model(execution.modelFile)
  File "/home/andrea/environments/new_env/lib/python3.5/site-packages/xgboost/core.py", line 1106, in load_model
    ptr = (ctypes.c_char * len(buf)).from_buffer(buf)
TypeError: memoryview: a bytes-like object is required, not 'FieldFile'

Модель исполнения:

class Execution(models.Model):
    title = models.CharField(max_length=100)
    date = models.DateTimeField(auto_now_add=True)
    dataFile = models.FileField(upload_to="dataset", null=True)
    modelFile = models.FileField(upload_to="model", null=True)
    def __str__(self):
        return self.title

Я не уверен, что делать дальше, BinaryField, поле Custom xgboost или есть более простое решение. Большое спасибо

0 ответов

Другие вопросы по тегам