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

如何在Keras拓扑调优代码中无需展平输入定义输入层

解决方法

你的输入是每个样本包含M个特征(对应输入结构的行数),单个样本的形状为(M,)。无需使用Flatten层,直接在第一个全连接(Dense)层中指定input_shape即可,同时适配你当前的超参数调优框架,具体修改如下:

修改后的完整代码

# 初始化Sequential模型
model = keras.Sequential()

# 第一个隐藏层同时定义输入形状,替代原有的Flatten层
# 将M替换为你实际的特征数量(输入结构的行数)
first_units = hp.Int("units_1", min_value=32, max_value=512, step=32)
model.add(keras.layers.Dense(
    units=first_units,
    activation="relu",
    input_shape=(M,)
))
# 为第一个隐藏层添加Dropout
model.add(keras.layers.Dropout(hp.Float("dropout_1", 0, 0.3, step=0.1)))

# 添加剩余的隐藏层(当超参数指定的层数大于1时)
# num_layers取值2-6,对应总隐藏层数量1-5,已添加1个,所以从2开始循环
num_layers = hp.Int("num_layers", 2, 6)
for i in range(2, num_layers):
    model.add(
        keras.layers.Dense(
            units=hp.Int("units_" + str(i), min_value=32, max_value=512, step=32),
            activation="relu")
    )
    
    model.add(keras.layers.Dropout(hp.Float("dropout_" + str(i), 0, 0.3, step=0.1)))

# 添加输出层
model.add(keras.layers.Dense(units=10, activation="softmax"))

关键说明

  • Keras支持在第一个Dense层中通过input_shape=(M,)直接定义输入结构,会自动创建对应的输入层,无需额外添加Input或Flatten层。
  • 拆分原循环逻辑:先手动添加带输入形状的第一个隐藏层,再循环添加剩余层,避免重复设置input_shape参数。
  • 把代码中的M替换为你实际的特征行数(比如你示例中的CpG_num),即可适配你的输入数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 02:55:24