Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

AttributeError: 'super' object has no attribute '__sklearn_tags__' #1079

Closed
edoumazane opened this issue Dec 17, 2024 · 2 comments
Closed

AttributeError: 'super' object has no attribute '__sklearn_tags__' #1079

edoumazane opened this issue Dec 17, 2024 · 2 comments

Comments

@edoumazane
Copy link

Running skorch/notebooks/Advanced_Usage.ipynb

with freshly installed environment

# conda env create -f environment.yaml
# conda env update -f environment.yaml
name: skorch
channels: 
  - conda-forge
  - pytorch
  - defaults
dependencies:
  - python=3.10
  - pip
  - ipykernel
  - pip:
    - skorch
    - torch
    - torchvision

I ran into the following error:

net.fit(X, y)


---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
Cell In[14], [line 1](vscode-notebook-cell:?execution_count=14&line=1)
----> [1](vscode-notebook-cell:?execution_count=14&line=1) net.fit(X, y)

File ~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/skorch/classifier.py:165, in NeuralNetClassifier.fit(self, X, y, **fit_params)
    [154](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/skorch/classifier.py:154) """See ``NeuralNet.fit``.
    [155](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/skorch/classifier.py:155) 
    [156](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/skorch/classifier.py:156) In contrast to ``NeuralNet.fit``, ``y`` is non-optional to
   (...)
    [160](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/skorch/classifier.py:160) 
    [161](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/skorch/classifier.py:161) """
    [162](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/skorch/classifier.py:162) # pylint: disable=useless-super-delegation
    [163](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/skorch/classifier.py:163) # this is actually a pylint bug:
    [164](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/skorch/classifier.py:164) # https://github.com/PyCQA/pylint/issues/1085
--> [165](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/skorch/classifier.py:165) return super(NeuralNetClassifier, self).fit(X, y, **fit_params)

File ~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/skorch/net.py:1319, in NeuralNet.fit(self, X, y, **fit_params)
   [1316](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/skorch/net.py:1316) if not self.warm_start or not self.initialized_:
   [1317](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/skorch/net.py:1317)     self.initialize()
-> [1319](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/skorch/net.py:1319) self.partial_fit(X, y, **fit_params)
   [1320](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/skorch/net.py:1320) return self

File ~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/skorch/net.py:1278, in NeuralNet.partial_fit(self, X, y, classes, **fit_params)
   [1276](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/skorch/net.py:1276) self.notify('on_train_begin', X=X, y=y)
   [1277](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/skorch/net.py:1277) try:
-> [1278](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/skorch/net.py:1278)     self.fit_loop(X, y, **fit_params)
   [1279](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/skorch/net.py:1279) except KeyboardInterrupt:
   [1280](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/skorch/net.py:1280)     pass

File ~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/skorch/net.py:1196, in NeuralNet.fit_loop(self, X, y, epochs, **fit_params)
   [1190](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/skorch/net.py:1190)     self.run_single_epoch(iterator_train, training=True, prefix="train",
   [1191](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/skorch/net.py:1191)                           step_fn=self.train_step, **fit_params)
   [1193](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/skorch/net.py:1193)     self.run_single_epoch(iterator_valid, training=False, prefix="valid",
   [1194](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/skorch/net.py:1194)                           step_fn=self.validation_step, **fit_params)
-> [1196](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/skorch/net.py:1196)     self.notify("on_epoch_end", **on_epoch_kwargs)
   [1197](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/skorch/net.py:1197) return self

File ~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/skorch/net.py:386, in NeuralNet.notify(self, method_name, **cb_kwargs)
    [384](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/skorch/net.py:384) getattr(self, method_name)(self, **cb_kwargs)
    [385](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/skorch/net.py:385) for _, cb in self.callbacks_:
--> [386](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/skorch/net.py:386)     getattr(cb, method_name)(self, **cb_kwargs)

File ~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/skorch/callbacks/scoring.py:489, in EpochScoring.on_epoch_end(self, net, dataset_train, dataset_valid, **kwargs)
    [486](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/skorch/callbacks/scoring.py:486)     return
    [488](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/skorch/callbacks/scoring.py:488) with _cache_net_forward_iter(net, self.use_caching, y_pred) as cached_net:
--> [489](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/skorch/callbacks/scoring.py:489)     current_score = self._scoring(cached_net, X_test, y_test)
    [491](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/skorch/callbacks/scoring.py:491) self._record_score(net.history, current_score)

File ~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/skorch/callbacks/scoring.py:181, in ScoringBase._scoring(self, net, X_test, y_test)
    [178](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/skorch/callbacks/scoring.py:178) """Resolve scoring and apply it to data. Use cached prediction
    [179](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/skorch/callbacks/scoring.py:179) instead of running inference again, if available."""
    [180](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/skorch/callbacks/scoring.py:180) scorer = check_scoring(net, self.scoring_)
--> [181](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/skorch/callbacks/scoring.py:181) return scorer(net, X_test, y_test)

File ~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/sklearn/metrics/_scorer.py:288, in _BaseScorer.__call__(self, estimator, X, y_true, sample_weight, **kwargs)
    [285](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/sklearn/metrics/_scorer.py:285) if sample_weight is not None:
    [286](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/sklearn/metrics/_scorer.py:286)     _kwargs["sample_weight"] = sample_weight
--> [288](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/sklearn/metrics/_scorer.py:288) return self._score(partial(_cached_call, None), estimator, X, y_true, **_kwargs)

File ~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/sklearn/metrics/_scorer.py:378, in _Scorer._score(self, method_caller, estimator, X, y_true, **kwargs)
    [341](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/sklearn/metrics/_scorer.py:341) """Evaluate the response method of `estimator` on `X` and `y_true`.
    [342](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/sklearn/metrics/_scorer.py:342) 
    [343](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/sklearn/metrics/_scorer.py:343) Parameters
   (...)
    [367](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/sklearn/metrics/_scorer.py:367)     Score function applied to prediction of estimator on X.
    [368](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/sklearn/metrics/_scorer.py:368) """
    [369](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/sklearn/metrics/_scorer.py:369) self._warn_overlap(
    [370](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/sklearn/metrics/_scorer.py:370)     message=(
    [371](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/sklearn/metrics/_scorer.py:371)         "There is an overlap between set kwargs of this scorer instance and"
   (...)
    [375](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/sklearn/metrics/_scorer.py:375)     kwargs=kwargs,
    [376](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/sklearn/metrics/_scorer.py:376) )
--> [378](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/sklearn/metrics/_scorer.py:378) pos_label = None if is_regressor(estimator) else self._get_pos_label()
    [379](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/sklearn/metrics/_scorer.py:379) response_method = _check_response_method(estimator, self._response_method)
    [380](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/sklearn/metrics/_scorer.py:380) y_pred = method_caller(
    [381](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/sklearn/metrics/_scorer.py:381)     estimator,
    [382](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/sklearn/metrics/_scorer.py:382)     _get_response_method_name(response_method),
    [383](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/sklearn/metrics/_scorer.py:383)     X,
    [384](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/sklearn/metrics/_scorer.py:384)     pos_label=pos_label,
    [385](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/sklearn/metrics/_scorer.py:385) )

File ~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/sklearn/base.py:1277, in is_regressor(estimator)
   [1270](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/sklearn/base.py:1270)     warnings.warn(
   [1271](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/sklearn/base.py:1271)         f"passing a class to {print(inspect.stack()[0][3])} is deprecated and "
   [1272](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/sklearn/base.py:1272)         "will be removed in 1.8. Use an instance of the class instead.",
   [1273](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/sklearn/base.py:1273)         FutureWarning,
   [1274](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/sklearn/base.py:1274)     )
   [1275](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/sklearn/base.py:1275)     return getattr(estimator, "_estimator_type", None) == "regressor"
-> [1277](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/sklearn/base.py:1277) return get_tags(estimator).estimator_type == "regressor"

File ~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/sklearn/utils/_tags.py:396, in get_tags(estimator)
    [393](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/sklearn/utils/_tags.py:393) tag_provider = _find_tags_provider(estimator)
    [395](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/sklearn/utils/_tags.py:395) if tag_provider == "__sklearn_tags__":
--> [396](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/sklearn/utils/_tags.py:396)     tags = estimator.__sklearn_tags__()
    [397](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/sklearn/utils/_tags.py:397) else:
    [398](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/sklearn/utils/_tags.py:398)     # TODO(1.7): Remove this branch of the code
    [399](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/sklearn/utils/_tags.py:399)     # Let's go through the MRO and patch each class implementing _more_tags
    [400](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/sklearn/utils/_tags.py:400)     sklearn_tags_provider = {}

File ~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/sklearn/base.py:540, in ClassifierMixin.__sklearn_tags__(self)
    [539](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/sklearn/base.py:539) def __sklearn_tags__(self):
--> [540](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/sklearn/base.py:540)     tags = super().__sklearn_tags__()
    [541](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/sklearn/base.py:541)     tags.estimator_type = "classifier"
    [542](https://file+.vscode-resource.vscode-cdn.net/home/etienne.doumazane/code/tutorials/skorch/notebooks/~/programs/miniconda3/envs/skorch/lib/python3.10/site-packages/sklearn/base.py:542)     tags.classifier_tags = ClassifierTags()

AttributeError: 'super' object has no attribute '__sklearn_tags__'

sklearn version is 1.6.0 (python -c "import sklearn;print(sklearn.__version__)")

Downgrading scikit-learn to 1.5.2 worked for me.

I understand it is linked to scikit-learn/scikit-learn#30479

@BenjaminBossan
Copy link
Collaborator

Thanks for reporting and investigating, we're on it: #1078.

@githubnemo
Copy link
Collaborator

This should be fixed with the 1.1.0 release. I will close this issue but @edoumazane feel free to re-open if this is not resolved for you.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants