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

Conv2D下采样致维度≤0的ValueError问题求助

解决Keras Tuner中Conv2D层输出维度≤0的ValueError

错误根源分析

  1. 超参数名称冲突:第一个Conv2D的kernel_size误用了与filters相同的超参数名conv_1_filter,导致kernel_size被赋值为32/48等大数值(而非预期的3/5)。当卷积核尺寸大于输入特征图尺寸时,输出维度直接变为负数。
  2. 数据格式不匹配:指定data_format='channels_first'但输入形状是(28,28,1)(channels_last格式),导致维度顺序混乱,加剧尺寸计算错误。
  3. 潜在尺寸缩小风险:第二个Conv2D未明确padding策略,连续使用valid卷积可能在极端组合下导致特征图尺寸过小。
  4. 损失函数名称错误:原代码中'Sparse_Categorical_Crossentropy'的下划线位置错误,正确名称应为'SparseCategoricalCrossentropy'。

修正后的代码

def build_model(hp):
    model = keras.Sequential()
    # 修正1:为kernel_size设置独立超参数名,避免与filters冲突
    model.add(layers.Conv2D(
        filters=hp.Int('conv_1_filter', min_value=32, max_value=128, step=16),
        kernel_size=hp.Choice('conv_1_kernel', values=[3,5]),
        activation='relu',
        input_shape=(28,28,1),
        padding='valid',
        # 修正2:对齐数据格式,输入为channels_last格式
        data_format='channels_last'
    ))
    
    # 修正3:同样为第二个Conv2D的kernel_size设置独立超参数名
    model.add(layers.Conv2D(
        filters=hp.Int('conv_2_filter', min_value=32, max_value=64, step=16),
        kernel_size=hp.Choice('conv_2_kernel', values=[3,5]),
        activation='relu',
        # 可选:添加same padding避免特征图尺寸过度缩小
        padding='same'
    ))   
    model.add(layers.Flatten())
    model.add(layers.Dense(
        units=hp.Int('dense_1_units', min_value=32, max_value=128, step=16), 
        activation='relu'
    ))
    model.add(layers.Dense(10, activation='softmax'))
    model.compile(
        optimizer=keras.optimizers.Adam(hp.Choice('learning_rate', values=[1e-2,1e-3])),
        # 修正4:修正损失函数名称
        loss='SparseCategoricalCrossentropy',
        metrics=['accuracy']
    )
    return model

tuner_search=keras_tuner.RandomSearch(
    build_model,
    objective='val_accuracy',
    max_trials=5
)

关键修改说明

  • 超参数命名:将Conv2D的kernel_size超参数分别命名为conv_1_kernel和conv_2_kernel,确保取值为预期的3或5。
  • 数据格式对齐:输入形状(28,28,1)对应channels_last格式,与Keras默认格式一致,避免维度解析错误。
  • Padding策略:添加padding='same'可保证卷积后特征图尺寸不变,彻底规避维度为负的问题。
  • 损失函数修正:修正名称拼写错误,确保模型正常编译。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 01:25:37