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

使用keras_tuner的RandomSearch时logits与labels维度不匹配如何解决

错误原因
  1. 损失函数与标签格式不匹配
    你已经通过to_categorical()将标签转换为one-hot编码格式,单样本标签形状为(15,),但模型编译时使用的sparse_categorical_crossentropy损失函数仅支持整数格式的标签,单样本标签形状应为标量。格式不匹配导致框架将one-hot标签直接展平计算,batch为32时,logits第一维是32,标签展平后长度为32*15=480,和报错信息完全吻合。
  2. build_model函数存在逻辑错误
    函数中第一次return model之后的所有代码都不会执行,重复编写的model.compile和model.summary属于无效冗余代码,同时提前返回也会导致你写的第二次编译配置完全不生效。
修复方案

二选一即可:

方案A:适配one-hot标签修改损失函数

将模型编译时的损失函数替换为适配one-hot编码的categorical_crossentropy,同时清理build_model的冗余逻辑,修改后的函数如下:

def build_model(hp):
    model = keras.Sequential([
        keras.layers.Conv2D(
            filters=hp.Int('conv_1_filter', min_value=32, max_value=128, step=20),
            kernel_size=hp.Choice('conv_1_kernel', values=[3, 5]),
            activation='relu',
            input_shape=(50, 50, 3)
        ),
        keras.layers.Conv2D(
            filters=hp.Int('conv_2_filter', min_value=32, max_value=64, step=20),
            kernel_size=hp.Choice('conv_2_kernel', values=[3, 5]),
            activation='relu'
        ),
        keras.layers.Flatten(),
        keras.layers.Dense(
            units=hp.Int('dense_1_units', min_value=32, max_value=128, step=20),
            activation='relu'
        ),
        keras.layers.Dense(15, activation='softmax')
    ])

    model.compile(optimizer=keras.optimizers.Adam(hp.Choice('learning_rate', values=[1e-2, 1e-3])),
                  loss='categorical_crossentropy',
                  metrics=['accuracy'])
    model.summary()
    return model

方案B:保留稀疏损失修改标签格式

删除代码中y = to_categorical(y)这一行,保留LabelEncoder输出的整数格式标签,同时同样清理build_model函数的冗余逻辑即可。

内容的提问来源于stack exchange,提问作者T. Elhassan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 08:51:03