Python 管道GridSearchCV,不同步骤对应的参数

Python 管道GridSearchCV,不同步骤对应的参数,python,pipeline,hyperparameters,gridsearchcv,Python,Pipeline,Hyperparameters,Gridsearchcv,我正在尝试在管道中进行一些超参数调整,并进行以下设置: model = KerasClassifier(build_fn = create_model, epochs = 5) pipeline = Pipeline(steps =[('Tokenizepadder', TokenizePadding()), ('NN', model)] ) 在Tokenizepadder和我的神经网络中都有一个变量“maxlen”(对于神经网络,它被称

我正在尝试在管道中进行一些超参数调整,并进行以下设置:

model = KerasClassifier(build_fn = create_model, epochs = 5)  
pipeline = Pipeline(steps =[('Tokenizepadder', TokenizePadding()),
                          ('NN', model)] )
在Tokenizepadder和我的神经网络中都有一个变量“maxlen”(对于神经网络,它被称为max_length,我担心将它们命名为相同的名称会导致代码中的错误)。当我尝试执行网格搜索时,我正在努力使这些值对应起来。如果我分别对这些值进行网格搜索,它们将不会出现马赫数,并且会出现输入数据与神经网络不匹配的问题

简言之,我想做如下工作:


pipeline = Pipeline(steps =[('Tokenizepadder', TokenizePadding()),
                           ('NN', KerasClassifier(build_fn = create_model, epochs = 5, max_length = pipeline.get_params()['Tokenizepadder__maxlen']))] )


因此,当我对参数“Tokenizepadder\uu maxlen”执行网格搜索时,它会将值“NN\uu max\u length”更改为相同的值。

可能是您可以更改分类器和标记器,以传递
max\u len
参数。然后,仅使用标记器
max_len
参数进行网格搜索。 不是最干净的方式,但可能会

from sklearn.base import BaseEstimator, TransformerMixin, EstimatorMixin
class TokeinizePadding(BaseEstimator, TransformerMixin):
    def __init__(self, max_len, ...):
        self.max_len = max_len
        ...

    def fit(self, X, y=None):
        ...
        return self
   
    def transform(self, X, y=None):
        data = ... # your stuff
        return {"array": data, "max_len": self.max_len}
 

class KerasClassifier(...):
    ...
    def fit(data, y):
        self.max_len = data["max_len"]
        self.build_model()
        X = data["array"]
        ... # your stuff


可能您可以更改分类器和标记器,以传递
max\u len
参数。然后,仅使用标记器
max_len
参数进行网格搜索。 不是最干净的方式,但可能会

from sklearn.base import BaseEstimator, TransformerMixin, EstimatorMixin
class TokeinizePadding(BaseEstimator, TransformerMixin):
    def __init__(self, max_len, ...):
        self.max_len = max_len
        ...

    def fit(self, X, y=None):
        ...
        return self
   
    def transform(self, X, y=None):
        data = ... # your stuff
        return {"array": data, "max_len": self.max_len}
 

class KerasClassifier(...):
    ...
    def fit(data, y):
        self.max_len = data["max_len"]
        self.build_model()
        X = data["array"]
        ... # your stuff