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

如何在Keras Tuner中实现基础网格搜索?是否有替代方案?

Keras Tuner 网格搜索实现方案

Keras Tuner 官方确实没有提供专门的网格搜索调谐器类,你并没有遗漏相关内容。不过可以通过 RandomSearch 调谐器强制实现网格搜索的逻辑,具体方法如下:

  • 定义全离散参数空间:把所有需要调优的参数,通过 hp.Choice() 方法设置为包含网格所有候选值的离散选项
  • 固定遍历次数与随机种子:计算所有参数组合的总数量,将 max_trials 设为该总数,同时指定固定的 seed 参数,确保所有组合都会被完整遍历,不会出现重复或遗漏

代码示例

from keras_tuner import RandomSearch, HyperModel
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

class MyHyperModel(HyperModel):
    def build(self, hp):
        model = Sequential()
        # 定义离散的神经元数量候选值
        model.add(Dense(
            units=hp.Choice('units', [32, 64, 128]),
            activation='relu',
            input_shape=(10,)
        ))
        model.add(Dense(1, activation='sigmoid'))
        # 定义离散的优化器候选值
        model.compile(
            optimizer=hp.Choice('optimizer', ['adam', 'rmsprop']),
            loss='binary_crossentropy',
            metrics=['accuracy']
        )
        return model

# 计算总参数组合数:3(units) * 2(optimizer)=6
total_combinations = 3 * 2

# 初始化RandomSearch,强制实现网格搜索逻辑
tuner = RandomSearch(
    MyHyperModel(),
    objective='val_accuracy',
    max_trials=total_combinations,
    seed=42,  # 固定种子保证遍历所有组合
    directory='grid_search_results',
    project_name='custom_grid_search'
)

# 执行调优(假设已有训练和验证数据)
tuner.search(x_train, y_train, epochs=5, validation_data=(x_val, y_val))

原理说明

当 max_trials 等于参数组合总数且固定随机种子时,RandomSearch 会遍历所有可能的参数组合,不会产生随机跳过的情况,效果完全等价于传统网格搜索。相比其他调谐器,RandomSearch 是实现网格搜索最直接的选择,避免了贝叶斯优化等策略的自适应调整逻辑干扰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 12:31:09