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

调用prepare_data函数触发“too many values to unpack (expected 2)”错误求助

问题解决:too many values to unpack (expected 2)

核心原因

报错直接指向 (X_train, y_train)=load_data(TRAIN_DIR) 或 (X_test, y_test) = load_data(TEST_DIR) 这两行,说明你调用的load_data函数返回的值数量不等于2,但你试图把它解包成两个变量,因此触发了错误。

解决步骤

  1. 排查load_data的返回结构
    在调用load_data前添加打印代码,确认它实际返回的内容:

    # 检查训练集加载的返回结果
    train_result = load_data(TRAIN_DIR)
    print("训练集返回类型:", type(train_result))
    print("训练集返回元素数量:", len(train_result))
    print("训练集返回内容:", train_result)
    
    # 检查测试集加载的返回结果
    test_result = load_data(TEST_DIR)
    print("测试集返回类型:", type(test_result))
    print("测试集返回元素数量:", len(test_result))
    

    常见情况是load_data可能返回了训练集、标签、验证集、验证标签四个值,或者返回的是包含额外信息的嵌套结构。

  2. 调整变量解包方式
    根据打印结果修改解包代码:

    • 如果load_data返回4个值(X_train, y_train, X_val, y_val),而你不需要验证集,可改成:
      (X_train, y_train, _, _) = load_data(TRAIN_DIR)
      (X_test, y_test, _, _) = load_data(TEST_DIR)
      
    • 如果返回的是嵌套结构,就按照对应层级拆解。
  3. 修正代码中的语法错误
    你的代码里还有两处明显笔误,不修正会导致其他错误:

    • 函数定义开头的tydef要改成def
    • dataset.batch(...)后面的多余字符串pe here要删掉

修正后的完整代码示例:

def prepare_data(batch_size):
    (X_train, y_train)=load_data(TRAIN_DIR)
    (X_test, y_test) = load_data(TEST_DIR)
    X_all = np.concatenate([X_train, X_test])
    y_all = np.concatenate([y_train, y_test])
    X_all = X_all.astype(np.float32) / 255
    X_all = X_all.reshape(-1, 28, 28, 1) * 2. - 1.
    y_all = keras.utils.to_categorical(y_all, 10)

    dataset = tf.data.Dataset.from_tensor_slices((X_all, y_all))
    dataset = dataset.shuffle(1024)
    dataset = dataset.batch(batch_size, drop_remainder=True).prefetch(1)
    return dataset

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 04:45:46