如何在Keras Tuner中按隐藏层数设置神经元数量上限?
Keras Tuner按总隐藏层数设置神经元上限的正确实现
需求是用Keras Tuner调整神经网络超参数,搜索最优隐藏层数和每层神经元数量,规则为:
- 若模型有1层隐藏层,该层神经元数量上限为128
- 若模型有2层隐藏层,每层神经元数量上限为64
你之前尝试的代码逻辑错误,因为是按循环索引判断上限,而非总层数:
for i in range(hp.Choice('num_layers', [1, 2])): max_units = 128 if i == 1 else 64 hp_units = hp.Int(f'units_{i}', min_value=16, max_value=max_units, step=16) model.add(tf.keras.layers.Dense(units=hp_units, activation='relu', use_bias=True))
正确的实现方式是先获取总层数,再根据总层数统一设置每层的神经元上限:
# 先获取并保存选中的总隐藏层数 num_layers = hp.Choice('num_layers', [1, 2]) # 根据总层数确定所有隐藏层的神经元上限 max_units = 128 if num_layers == 1 else 64 # 循环添加对应数量的隐藏层 for i in range(num_layers): hp_units = hp.Int(f'units_{i}', min_value=16, max_value=max_units, step=16) model.add(tf.keras.layers.Dense(units=hp_units, activation='relu', use_bias=True))
这段代码的逻辑完全符合需求:
- 当选中1层隐藏层时,该层神经元上限为128
- 当选中2层隐藏层时,两层的神经元上限都为64
彻底避免了按循环索引判断导致的逻辑错误,也满足了防止过参数化的要求。
内容的提问来源于stack exchange,提问作者NC520
相关产品推荐
相关产品推荐

