Как использовать mean_squared_error как убыток с помощью sklearn.model_selection.cross_val_score () - PullRequest
0 голосов
/ 11 мая 2019

Я могу использовать "categoryor_crossentropy" в качестве функции потерь без ошибок, но когда я заменяю ее на "mse", возникает эта ошибка:

Ошибка при проверке цели: ожидается, что плотность_2 будет иметь форму (2,)но получил массив с формой (1,)

Если я использую следующий метод

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

, возникает другая ошибка:

Поддерживаются целевые типы: ('бинарный', 'мультикласс').Вместо этого получил 'multilabel-Indicator'.

Вопрос в том, как я могу использовать "mse" с функцией cross_val_score ()?

Это ссылка на github иЭто проблемный код:

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 голосов
/ 11 мая 2019

Первая ошибка касается несоответствия выходного размера, замените это

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

на

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

Поскольку это двоичная классификация, вам нужен только 1 нейрон.

Или, если вы хотите исправить вторую ошибку, вот почему.Невозможно проводить стратификацию на наклеенных ярлыках.Вы можете сделать одно горячее кодирование после стратификации.Таким образом,

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

должно следовать за

kfold = StratifiedKFold(n_splits=folds, shuffle=True, random_state=random_state)
...