NVE / avalanche_ml

Applying machine learning in the Norwegian Avalanche warning Service
MIT License
2 stars 1 forks source link

BulletinMachine.load does not work in clean global scope #12

Closed widforss closed 4 years ago

widforss commented 4 years ago

From Teams with @kmunve:

Når jeg bruker BulletinMachine.load() må jeg angi classifier_ og regressor_creator, men bør ikke de ble lagret også?

Jeg forventet at følgende kode fungerer:

from machine import BulletinMachine
ubm = BulletinMachine.load("demo")

men jeg får en feilmelding "AttributeError: Can't get attribute 'classifier_creator' on <module 'main' from 'C:/Users/kmu/PycharmProjects/avalanche_ml/modeling/use_saved_model.py'>"

og når jeg angi følgende fungerer det

from machine import BulletinMachine
def classifier_creator(indata, outdata, class_weight=None):
    return RandomForestClassifier(n_estimators=100, class_weight=class_weight)
def regressor_creator(indata, outdata):
    return MultiTaskElasticNet()
ubm = BulletinMachine.load("demo")

Hva om angitt creator avviker fra den som var angitt når modellen ble lagret?

This functionality was supposed to be in #9 which is not merged yet, but 521330e28a9d77ec322688605d73a368b3702052 was merged in #11 as I didn't bother to rebase that PR.

widforss commented 4 years ago

Pickle doesn't support serialising functions other than by reference. However, other libraries like dill does. It seems to work with sklearn as well.

widforss commented 4 years ago

Resoved by #9.