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

如何对Python自定义函数遍历参数网格所有组合实现网格搜索

自定义函数网格搜索参数遍历实现方案

直接生成参数取值的笛卡尔积得到所有组合,再逐组传参调用即可,不需要依赖第三方框架内置的网格搜索能力,两种常用实现如下:

注意:你提供的参数网格中最后一个键为epoch,和自定义函数入参epoch_number命名不一致,运行前需要对齐键名,否则会触发参数不匹配错误。

方案1:纯Python标准库实现(无额外依赖)

用标准库itertools.product生成所有参数取值的全排列组合,组装为关键字参数后传入自定义函数即可,适配任意自定义逻辑,灵活性最高。

import itertools

# 参数网格,键名与自定义函数入参完全对齐
grid = {
    'batch_size': [128, 256],
    'hidden_1': [10, 20],
    'dropout': [0, 0.45],
    'epoch_number': [10, 20]
}

# 自定义函数示例
def ModelMaker1(batch_size, hidden_1, dropout, epoch_number):
    # 替换为你自己的模型训练、推理、评估逻辑
    print(f"当前运行参数: batch_size={batch_size}, hidden_1={hidden_1}, dropout={dropout}, epoch_number={epoch_number}")
    return {"acc": 0.8} # 示例返回值

# 生成所有参数组合
param_names = list(grid.keys())
all_param_combos = itertools.product(*grid.values())

run_results = []
for combo in all_param_combos:
    # 将参数名和取值组装为关键字参数字典
    param_kwargs = dict(zip(param_names, combo))
    # 传参运行,可加异常捕获避免单组参数失败中断整个流程
    try:
        res = ModelMaker1(**param_kwargs)
        run_results.append({
            "params": param_kwargs,
            "result": res,
            "status": "success"
        })
    except Exception as e:
        run_results.append({
            "params": param_kwargs,
            "error_msg": str(e),
            "status": "failed"
        })

如果需要并行加速,直接把遍历逻辑替换为多进程/多线程池即可,核心传参逻辑不需要改动。

方案2:复用scikit-learn内置工具(环境已装sklearn时更简洁)

如果你的运行环境已经安装了scikit-learn,可以直接用内置的ParameterGrid工具生成参数组合,省去自己写笛卡尔积的步骤,底层逻辑和方案1一致:

from sklearn.model_selection import ParameterGrid

grid = {
    'batch_size': [128, 256],
    'hidden_1': [10, 20],
    'dropout': [0, 0.45],
    'epoch_number': [10, 20]
}

def ModelMaker1(batch_size, hidden_1, dropout, epoch_number):
    # 自定义逻辑
    pass

run_results = []
# ParameterGrid直接迭代返回组装好的参数字典
for param_kwargs in ParameterGrid(grid):
    res = ModelMaker1(**param_kwargs)
    run_results.append({"params": param_kwargs, "result": res})

实用提示

  • 参数组合总量较大时,建议边运行边将结果写入本地文件(如csv、jsonl格式),避免程序意外退出丢失已跑完的结果
  • 如果部分参数有依赖关系(比如某参数取特定值时另一个参数才生效),可以在遍历到对应组合时加判断逻辑跳过无效组合,减少不必要的运行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 12:51:19