Skorch NeuralNetRegressor与GridSearchCV自定义参数调优报错求助
问题解决方法
错误核心是参数命名格式不符合层级规则:自定义模型(Regressor)的参数需要通过[Pipeline步骤名]__module__[参数名]的格式传递,而非直接写[步骤名]__[参数名]。
修正步骤:
- 调整参数网格的命名格式
将属于自定义模型的参数(n_layers、activation)的命名修正为model__module__xxx格式,其他属于NeuralNetRegressor本身的参数(如optimizer、max_epochs)保持原有格式即可:
param_grid = { 'model__optimizer': [optim.Adam, optim.Adamax, optim.NAdam], 'model__max_epochs': list(range(30,40)), 'model__module__activation': [nn.Identity, nn.ReLU, nn.ELU, nn.ReLU6, nn.GELU, nn.Softplus, nn.Softsign, nn.Tanh, nn.Sigmoid, nn.Hardsigmoid], 'model__batch_size': [10,12,15,20], 'model__module__n_layers': list(range(11,30)), 'model__lr': [0.0001, 0.0008, 0.009, 0.001, 0.002, 0.003, 0.004, 0.01], }
- 修正Pipeline中的模型类名笔误
你定义的模型类是Regressor,但代码中写了module=FatRegressor,这是明显笔误,需要修正:
pipeline = Pipeline(steps=[('scaler', StandardScaler()), ('model', NeuralNetRegressor(module=Regressor, device='cuda'))])
原理说明:
- Skorch的
NeuralNetRegressor通过module__参数名的格式传递自定义模型的初始化参数; - 当模型处于Scikit-learn的
Pipeline中时,必须在参数前加上Pipeline步骤的名称(此处为model),形成步骤名__module__参数名的完整层级路径,这样GridSearchCV才能正确识别参数所属的对象。
内容的提问来源于stack exchange,提问作者flying_loaf_3
相关产品推荐
相关产品推荐

