使用SciKeras与Scikit-learn时出现AttributeError: 'super' object has no attribute '__sklearn_tags__'错误的解决方法咨询
看起来你在结合SciKeras和Scikit-learn做Keras模型的交叉验证时碰到了版本兼容的坑,这个错误大概率是因为库之间的接口适配出了问题。先理清楚你的场景:
你做完数据预处理后运行了这段代码:
import tensorflow from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense from scikeras.wrappers import KerasClassifier from sklearn.model_selection import cross_val_score from sklearn.model_selection import StratifiedKFold def build_classifier(): classifier = Sequential() classifier.add(Dense(units=6, activation="relu", kernel_initializer="uniform", input_dim=11 ) ) classifier.add(Dense(units=6, activation="relu", kernel_initializer="uniform" ) ) classifier.add(Dense(units=1, activation="sigmoid", kernel_initializer="uniform" ) ) classifier.compile(optimizer="adam", loss="binary_crossentropy", metrics=["accuracy"]) return classifier classifier = KerasClassifier(model=build_classifier, batch_size=10, epochs=100, verbose=0) precisions = cross_val_score(estimator=classifier, X=X_train, y=y_train, cv=10, n_jobs=1)
然后遇到了这个错误:
AttributeError: 'super' object has no attribute '__sklearn_tags__'
你的环境版本是:
python==3.9.13 scikit-learn==1.6.1 scikeras==0.13.0 keras==3.8.0 tensorflow==2.18.0
给你几个可行的解决思路:
优先升级SciKeras版本:你用的
scikeras==0.13.0发布时间较早,对Scikit-learn 1.6.x引入的__sklearn_tags__接口支持不足。直接升级到最新稳定版应该能解决适配问题:pip install --upgrade scikeras要是需要指定版本,试试
scikeras==0.14.0及以上的版本,这些版本专门适配了Scikit-learn的新接口。降级Scikit-learn到兼容版本:如果升级SciKeras有其他依赖冲突,可以把Scikit-learn降到
1.5.x系列,这个版本和scikeras==0.13.0的兼容性更稳定:pip install scikit-learn==1.5.2小细节检查:另外可以试试调整
KerasClassifier的参数传递方式,把模型相关的参数加上model__前缀(不过这更多是规范用法,不一定是根本解决办法,但可以试试):classifier = KerasClassifier(model=build_classifier, model__batch_size=10, model__epochs=100, verbose=0)
先试试前两个版本调整的方法,这个错误基本都是版本不匹配导致的接口适配问题,调整后应该能解决。
备注:内容来源于stack exchange,提问作者Romain
相关产品推荐
相关产品推荐

