classifier.py 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import chainer
  2. import chainer.functions as F
  3. import chainer.links as L
  4. from chainer_addons.models.base import BaseClassifier
  5. import logging
  6. class SeparateModelClassifier(BaseClassifier):
  7. """Classifier, that holds two separate models"""
  8. def __init__(self, *args, **kwargs):
  9. super(SeparateModelClassifier, self).__init__(*args, **kwargs)
  10. with self.init_scope():
  11. self.init_separate_model()
  12. def init_separate_model(self):
  13. assert hasattr(self, "model"), \
  14. "This classifiert has no \"model\" attribute!"
  15. if hasattr(self, "separate_model"):
  16. logging.warn("Global Model already initialized! Skipping further execution!")
  17. return
  18. self.separate_model = self.model.copy(mode="copy")
  19. def loader(self, model_loader):
  20. def inner(n_classes, feat_size):
  21. # use the given feature size here
  22. model_loader(n_classes=n_classes, feat_size=feat_size)
  23. # use the given feature size first ...
  24. self.separate_model.reinitialize_clf(
  25. n_classes=n_classes,
  26. feat_size=feat_size)
  27. # then copy model params ...
  28. self.separate_model.copyparams(self.model)
  29. # now use the default feature size to re-init the classifier
  30. self.separate_model.reinitialize_clf(
  31. n_classes=n_classes,
  32. feat_size=self.feat_size)
  33. return inner