如何通过sklearn.model_selection.cross_val_score()

时间:2019-05-11 02:13:46

标签: python keras scikit-learn deep-learning loss-function

我可以将“ categorical_crossentropy”用作损失函数,而不会出现错误,但是当我将其替换为“ mse”时,会出现以下错误:

  

检查目标时出错:预期密集_2的形状为(2,),但数组的形状为(1,)

如果我使用以下方法

labels = np_utils.to_categorical(labels, num_classes = 2)

另一个错误引发:

  

受支持的目标类型为:(“二进制”,“多类”)。取而代之的是“ multilabel-indicator”。

问题是如何在cross_val_score()函数中使用“ mse”?

这是github link,这是麻烦的代码:

model = KerasClassifier(build_fn=customXceptionBuild, epochs=epochs, batch_size=batch_size)
kfold = StratifiedKFold(n_splits=folds, shuffle=True, random_state=random_state)

def classification_report_with_accuracy_score(y_true, y_pred):
    originalclass.extend(y_true)
    predictedclass.extend(y_pred)
    return accuracy_score(y_true, y_pred) # return accuracy score

scoring = make_scorer(classification_report_with_accuracy_score)

scores = cross_val_score(model, data, labels, cv=kfold, error_score="raise", scoring=scoring ) 

customXceptionBuild函数实现Xception预训练模型,并使用“ mse”作为损失函数。

1 个答案:

答案 0 :(得分:0)

第一个错误是关于输出大小不匹配的, 改变这个

move_uploaded_file

F3 = Dense(classes, activation='softmax')(D2)

由于这是二进制分类,因此您只需要1个神经元。

或者,如果您想解决第二个错误,这就是原因。无法对一键编码标签进行分层。分层后可以进行一种热编码。因此,

F3 = Dense(1, activation='softmax')(D2)

应该在

之后
labels = np_utils.to_categorical(labels, num_classes = 2)