运行 k 折交叉验证时的 BrokenProcessPool

问题描述 投票:0回答:1

我一直在尝试对感知模型进行 k 折交叉验证。出现错误,但感谢某人我能够解决它。但后来我遇到了一个新的错误消息,如下所示。

class Perceptron(tf.keras.Model):
    def __init__(self):
        super(Perceptron, self).__init__()
        self.dense = tf.keras.layers.Dense(units=1, activation='sigmoid')

    def call(self, inputs):
        return self.dense(inputs)
from sklearn.model_selection import RepeatedKFold, cross_val_score
from tensorflow.keras.models import * 
from tensorflow.keras.layers import * 
from tensorflow.keras.wrappers.scikit_learn import KerasRegressor

def buildmodel():
    model_kfold = Perceptron()
    model_kfold.compile(optimizer='sgd', loss='binary_crossentropy', metrics=['accuracy'])
    return(model_kfold)

estimator= KerasRegressor(build_fn=buildmodel, epochs=100, batch_size=10, verbose=0)
kfold= RepeatedKFold(n_splits=5, n_repeats=10)
results= cross_val_score(estimator, x_train, y_train, cv=kfold, n_jobs=2)  # 2 cpus
results.mean()  # Mean MSE

以下是错误信息

---------------------------------------------------------------------------
_RemoteTraceback                          Traceback (most recent call last)
_RemoteTraceback: 
"""
Traceback (most recent call last):
  File "/home/jinzzasol/miniconda3/envs/tensorflow/lib/python3.10/site-packages/joblib/externals/loky/process_executor.py", line 391, in _process_worker
    call_item = call_queue.get(block=True, timeout=timeout)
  File "/home/jinzzasol/miniconda3/envs/tensorflow/lib/python3.10/multiprocessing/queues.py", line 122, in get
    return _ForkingPickler.loads(res)
ModuleNotFoundError: No module named 'keras.wrappers'
"""

The above exception was the direct cause of the following exception:

BrokenProcessPool                         Traceback (most recent call last)
/home/jinzzasol/Code/cs5834/assignment4/hw4.ipynb Cell 43 line 1
     11 estimator= KerasRegressor(build_fn=buildmodel, epochs=100, batch_size=10, verbose=0)
     12 kfold= RepeatedKFold(n_splits=5, n_repeats=10)
---> 13 results= cross_val_score(estimator, x_train, y_train, cv=kfold, n_jobs=2)  # 2 cpus
     14 results.mean()  # Mean MSE

File ~/miniconda3/envs/tensorflow/lib/python3.10/site-packages/sklearn/model_selection/_validation.py:562, in cross_val_score(estimator, X, y, groups, scoring, cv, n_jobs, verbose, fit_params, pre_dispatch, error_score)
    559 # To ensure multimetric format is not supported
    560 scorer = check_scoring(estimator, scoring=scoring)
--> 562 cv_results = cross_validate(
...
    404     finally:
    405         # Break a reference cycle with the exception in self._exception
    406         self = None

BrokenProcessPool: A task has failed to un-serialize. Please ensure that the arguments of the function are all picklable.
python tensorflow perceptron k-fold
1个回答
0
投票

我发现这是因为我制作的自定义模型与 cross_val_score 方法不兼容。我最终使用 Keras 函数而不是我自己的模型构建模型。谢谢。

© www.soinside.com 2019 - 2024. All rights reserved.