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

TensorFlow加载图像数据时出现too many values to unpack错误如何解决

错误原因

tf.keras.preprocessing.image_dataset_from_directory() 单次调用仅返回1个tf.data.Dataset类型的对象,该对象是由批次化的(图像, 标签)元组组成的,你代码左侧要求解包出4个独立变量,和返回值结构完全不匹配,因此触发解包失败的报错。

修复步骤
  • 第一步:分两次调用接口,通过参数指定分别生成训练集、测试集
  • 第二步:通过map方法对数据集做归一化,不能直接对Dataset对象做算术运算
  • 第三步:如果需要提取全量的图像、标签数组,可对Dataset对象做拼接处理
修复后完整代码
import tensorflow as tf
from tensorflow.keras import datasets, layers, models
import matplotlib.pyplot as plt
import pathlib

data_dir = "C:/Users/efsol/OneDrive/Classification"
data_dir = pathlib.Path(data_dir)
image_count = len(list(data_dir.glob('*/*.jpg')))
print(image_count)
print(data_dir.is_dir())

# 定义参数
batch_size = 32
img_height = 180
img_width = 180
val_split = 0.2 # 20%数据作为测试集
random_seed = 123

# 加载训练集
train_ds = tf.keras.preprocessing.image_dataset_from_directory(
  data_dir,
  validation_split=val_split,
  subset="training",
  seed=random_seed,
  image_size=(img_height, img_width),
  batch_size=batch_size)

# 加载测试集
val_ds = tf.keras.preprocessing.image_dataset_from_directory(
  data_dir,
  validation_split=val_split,
  subset="validation",
  seed=random_seed,
  image_size=(img_height, img_width),
  batch_size=batch_size)

# 归一化处理(适配Dataset结构)
normalization_layer = layers.Rescaling(1./255)
train_ds = train_ds.map(lambda x, y: (normalization_layer(x), y))
val_ds = val_ds.map(lambda x, y: (normalization_layer(x), y))

# 【小数据集可选:提取全量图像、标签到numpy数组】
# train_images = tf.concat([x for x, y in train_ds], axis=0).numpy()
# train_labels = tf.concat([y for x, y in train_ds], axis=0).numpy()
# test_images = tf.concat([x for x, y in val_ds], axis=0).numpy()
# test_labels = tf.concat([y for x, y in val_ds], axis=0).numpy()
额外说明

如果你的数据集不大,不需要批次训练,就可以打开注释里的拼接代码,直接得到和你最初预期格式一致的train_images/train_labels/test_images/test_labels四个变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:54:03