Реализация перекрестной проверки K-Fold, я получаю эту ошибку TypeError: Если оценка не указана, переданный оценщик должен иметь метод 'Score' - PullRequest
0 голосов
/ 06 марта 2020

У меня есть этот код, который строит модель и обучает ее.

model = Sequential()
model.add(Convolution2D(32, kernel_size = (3,3),padding = 'same' ,input_shape= input_shape))
model.add(Activation('linear'))
model.add(Convolution2D(32, kernel_size = (3,3)))
model.add(MaxPooling2D(pool_size=(2, 2),padding='same' ))
model.add(Dropout(0.5))

model.add(Convolution2D(64, kernel_size = (3,3)))
model.add(Activation('linear'))
model.add(Convolution2D(64, kernel_size = (3,3)))
model.add(MaxPooling2D(pool_size=(2, 2),padding='same' ))
model.add(Dropout(0.5))

model.add(Convolution2D(128, kernel_size = (3,3)))
model.add(Activation('linear'))
model.add(Convolution2D(128, kernel_size = (3,3), padding = 'same' ))
model.add(Activation('linear'))
model.add(Dropout(0.5))

model.add(Flatten())
model.add(Dense(10))
model.add(Dropout(0.5))

model.add(Activation('linear'))
model.add(Dense(numclasses))
model.add(Activation('softmax'))

model.compile(loss='categorical_crossentropy', optimizer='rmsprop',metrics=["accuracy"])
hist = model.fit(X_train, y_train, batch_size=32, nb_epoch=30, verbose=1, validation_data=(X_test, y_test), callbacks = callbacks_list)

Итак, у меня есть 9000 изображений, которые я обучил, как показано ниже, но как вы Я вижу, есть несколько признаков обобщения, я думаю, если нет, пожалуйста, поправьте меня

enter image description here

Но в любом случае я пытаюсь реализовать перекрестную валидацию K-Fold .. я думаю, есть много разных способов сделать это, но я выбрал этот подход, так как думал, что это будет самым простым ..

#Applying K-Fold Cross Validation

accuracy = cross_val_score(estimator=model, X = X_train, y = y_train, cv=10)
accuracy.mean()
accuracy.std()
#Predicting the test set results
y_pred = classifier.predict(X_test)

I реализовал другие способы сделать K-Fold, но я продолжаю получать эту ошибку

TypeError                                 Traceback (most recent call last)
<ipython-input-181-765b62be4342> in <module>
      1 #Applying K-Fold Cross Validation
      2 
----> 3 accuracy = cross_val_score(estimator=model, X = X_train, y = y_train, cv=10)
      4 accuracy.mean()
      5 accuracy.std()

~/anaconda3/envs/tensorflowenv/lib/python3.7/site-packages/sklearn/model_selection/_validation.py in cross_val_score(estimator, X, y, groups, scoring, cv, n_jobs, verbose, fit_params, pre_dispatch, error_score)
    382     """
    383     # To ensure multimetric format is not supported
--> 384     scorer = check_scoring(estimator, scoring=scoring)
    385 
    386     cv_results = cross_validate(estimator=estimator, X=X, y=y, groups=groups,

~/anaconda3/envs/tensorflowenv/lib/python3.7/site-packages/sklearn/metrics/scorer.py in check_scoring(estimator, scoring, allow_none)
    293                 "If no scoring is specified, the estimator passed should "
    294                 "have a 'score' method. The estimator %r does not."
--> 295                 % estimator)
    296     elif isinstance(scoring, Iterable):
    297         raise ValueError("For evaluating multiple scores, use "

TypeError: If no scoring is specified, the estimator passed should have a 'score' method. The estimator <tensorflow.python.keras.engine.sequential.Sequential object at 0x7f0ec5431860> does not.

Если кто-то знает, как решить эту проблему, пожалуйста, помогите .. спасибо!

...