You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Optuna trial设置sklearn MLPRegressor的hidden_layer_sizes参数

Optuna调优MLPRegressor隐藏层参数方案

场景1:固定隐藏层层数

如果已经确定使用固定数量的隐藏层(比如2层),只需分别为每一层定义神经元搜索参数,最后拼接为元组传入即可:

def objective(trial):
    # 第一层神经元搜索范围100-500,步长可按需调整
    layer1_units = trial.suggest_int('layer1_units', 100, 500, step=10)
    # 第二层神经元搜索范围100-500
    layer2_units = trial.suggest_int('layer2_units', 100, 500, step=10)
    hidden_layer_sizes = (layer1_units, layer2_units)

    # 初始化MLPRegressor模型
    model = MLPRegressor(
        hidden_layer_sizes=hidden_layer_sizes,
        learning_rate_init = trial.suggest_float('learning_rate_init',0.0001, 0.1001, step=0.005)
        # 其他模型参数自行补充
    )
    # 后续模型训练、评估逻辑保持不变
    # ...

场景2:同时优化隐藏层数量和每层神经元数

如果需要同时搜索隐藏层的层数(比如1~3层)和对应神经元数,可以先定义层数的搜索范围,循环生成每层的神经元参数后转成元组即可:

def objective(trial):
    # 搜索隐藏层层数,范围1-3层
    n_layers = trial.suggest_int('n_layers', 1, 3)
    hidden_layer_list = []
    for i in range(n_layers):
        # 每层神经元均在100-500区间搜索
        units = trial.suggest_int(f'layer{i+1}_units', 100, 500, step=10)
        hidden_layer_list.append(units)
    # *必须转为元组格式才符合MLPRegressor的参数要求*
    hidden_layer_sizes = tuple(hidden_layer_list)

    # 初始化MLPRegressor模型
    model = MLPRegressor(
        hidden_layer_sizes=hidden_layer_sizes,
        learning_rate_init = trial.suggest_float('learning_rate_init',0.0001, 0.1001, step=0.005)
        # 其他模型参数自行补充
    )
    # 后续模型训练、评估逻辑保持不变
    # ...

补充说明

  • 步长step可根据算力情况调整,步长越大搜索效率越高,步长越小参数搜索粒度越细
  • Optuna会自动为每层神经元生成独立的搜索空间,无需额外处理参数冲突问题

内容的提问来源于stack exchange,提问作者user88484

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 20:54:01