Python 在执行K倍交叉验证时,我得到了这个错误类型错误:如果没有指定评分,通过的估计器应该有一个';得分';方法

Python 在执行K倍交叉验证时,我得到了这个错误类型错误:如果没有指定评分,通过的估计器应该有一个';得分';方法,python,jupyter-notebook,conv-neural-network,cross-validation,k-fold,Python,Jupyter Notebook,Conv Neural Network,Cross Validation,K Fold,我有这个代码来构建模型并对其进行训练。 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=(

我有这个代码来构建模型并对其进行训练。

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)
#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)
所以我有9000张图片,我已经按照如下所示进行了培训,但正如您所看到的,有一些概括的迹象正在发生,我想如果没有,请纠正我

但不管怎样,我正在尝试实现K-Fold交叉验证。。我想有很多不同的方法可以做到这一点,但我采取了这种方法,因为我认为这是最简单的方法。

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)
#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)
我已经实现了其他的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.
TypeError回溯(最近一次调用)
在里面
1#应用K-折叠交叉验证
2.
---->3准确度=交叉分值(估计器=模型,X=X\U序列,y=y\U序列,cv=10)
4.平均值()
5.std()
交叉评分中的~/anaconda3/envs/tensorflowenv/lib/python3.7/site-packages/sklearn/model\u selection//u validation.py(估计器、X、y、组、评分、cv、n作业、详细信息、拟合参数、发送前、错误评分)
382     """
383#确保不支持多度量格式
-->384评分员=检查评分(评估员,评分=评分)
385
386 cv_结果=交叉验证(估计器=估计器,X=X,y=y,组=组,
检查评分中的~/anaconda3/envs/tensorflowenv/lib/python3.7/site-packages/sklearn/metrics/scorer.py(估计器、评分、允许无)
293“如果未指定评分,则通过的估计员应”
294“有一个‘评分’方法。估算器%r没有。”
-->295%估计数)
296 elif isinstance(评分,可测量):
297 raise VALUE ERROR(“对于评估多个分数,使用”
TypeError:如果未指定评分,则通过的估计员应具有“评分”方法。估计员没有。
如果有人知道如何解决这个问题,那么请提供帮助。谢谢


你试过这个吗?是的。我试过实现它,但我可能正在努力适应我的代码…是因为我没有使用方法吗?@Danielblei我现在没有合适的工具来检查。我不知道这是否能帮到你,但有人提到Keras和Sklearn的问题。也许试着做Kfold之前:
kfold=StratifiedKFold(n\u splits=10,shuffle=True,random\u state=seed)
`
accurity=cross\u val\u分数(估计器=模型,X=X\u序列,y=y\u序列,cv=kfold)
@DanielBlei Okayy谢谢!因为上面的问题是我在以不同方式实施Kfold交叉验证时遇到的两个错误。我先试试你给我的东西。我会通知你的,谢谢!