KerasClassifier结合cross_val_score时出现loss指标识别错误求助
解决
ValueError: Could not interpret metric identifier: loss问题 问题根源
你在初始化KerasClassifier时额外传入了loss='binary_crossentropy'参数,但SciKeras的KerasClassifier会将这个参数当作**评估指标(metric)**传递给Keras,而Keras 3无法识别字符串"loss"作为合法的metric标识符,导致报错。你的buildNetwork函数里已经在compile方法中指定了损失函数,不需要在KerasClassifier重复传入。
解决步骤
直接移除KerasClassifier初始化时的loss参数即可,修正后的代码如下:
def buildNetwork(): classificator = Sequential() classificator.add(Dense(units = 20, activation='relu', kernel_initializer='random_uniform', input_shape=(30,))) classificator.add(Dense(units = 20, activation='relu', kernel_initializer='random_uniform')) classificator.add(Dense(units = 1, activation='sigmoid')) optimizer = keras.optimizers.Adam(learning_rate=0.001, weight_decay=0.000001) classificator.compile(optimizer=optimizer, loss='binary_crossentropy', metrics=['binary_accuracy']) return classificator # 移除多余的loss参数 classifier = KerasClassifier(model=buildNetwork,batch_size=10,epochs=100) score = cross_val_score(estimator=classifier, X=data, y=truth, cv=10, error_score='raise')
补充说明
- 你的环境版本(Keras 3.0.8、TF 2.15.0、SciKeras 0.12.0)本身兼容性没问题,问题出在参数传递的逻辑误解上。
- SciKeras的
KerasClassifier会把除model、batch_size、epochs等特定参数外的其他参数,当作model.compile()的参数传递,但在处理损失函数时,它会错误地将其纳入metric的解析流程,导致Keras识别失败。
内容的提问来源于stack exchange,提问作者Zanchet2020
相关产品推荐
相关产品推荐

