首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“KerasClassifier”对象没有属性“loss”

“KerasClassifier”对象没有属性“loss”
EN

Stack Overflow用户
提问于 2020-08-10 22:51:02
回答 1查看 740关注 0票数 2

我正在使用keras进行流失预测。我已经使用了Sklearn的列转换器。我的代码是

代码语言:javascript
复制
import keras
from keras.models import Sequential
from keras.layers import Dense
from keras.wrappers.scikit_learn import KerasClassifier

def keras_classifier_wrapper():
    classifier = Sequential()
    classifier.add(Dense(9, input_dim=13, activation='relu'))
    classifier.add(Dense(8, activation='relu'))
    classifier.add(Dense(1, activation='sigmoid'))
    classifier.compile(optimizer='adam', loss='binary_crossentropy',  metrics=['accuracy'])
    return clf

clf = KerasClassifier(keras_classifier_wrapper, epochs=20, batch_size=50, verbose=0)
categorical_pipe = Pipeline([
    ('onehot', OneHotEncoder(handle_unknown='ignore'))
])
numerical_pipe = Pipeline([
   ('imputer', SimpleImputer(strategy='median'))
])
 
preprocessing = ColumnTransformer(
    [('cat', categorical_pipe, cat_var1),
     ('num', numerical_pipe, num_var1)])
 
model3 = Pipeline([
    ('preprocess', preprocessing),
    ('keras_clf', clf)
])

model3.fit(X_train, y_train)

但它显示了一个错误-

代码语言:javascript
复制
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-162-1f0472b386ae> in <module>()
----> 1 model3.fit(X_train, y_train)

2 frames
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/wrappers/scikit_learn.py in fit(self, x, y, **kwargs)
    157       self.model = self.build_fn(**self.filter_sk_params(self.build_fn))
    158 
--> 159     if (losses.is_categorical_crossentropy(self.model.loss) and
    160         len(y.shape) != 2):
    161       y = to_categorical(y)

AttributeError: 'KerasClassifier' object has no attribute 'loss'

你能告诉我为什么会出现这个错误以及如何解决它吗?

提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-10 23:11:46

问题出在keras_classifier_wrapper函数中

代码语言:javascript
复制
def keras_classifier_wrapper():
    classifier = Sequential()
    classifier.add(Dense(9, input_dim=13, activation='relu'))
    classifier.add(Dense(8, activation='relu'))
    classifier.add(Dense(1, activation='sigmoid'))
    classifier.compile(optimizer='adam', loss='binary_crossentropy',  metrics=['accuracy'])
    return clf # should be return classifier

您正在尝试返回clf,但没有定义它之后定义的clf。尝试返回分类器,然后它就可以工作了

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63342595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档