如何在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
相关产品推荐
相关产品推荐

