使用image_dataset_from_directory时遇ValueError:数组真值判断歧义
解决
image_dataset_from_directory传入自定义标签的报错问题 报错原因
你遇到的问题源于LabelEncoder.fit_transform返回的是numpy数组,而tf.keras.utils.image_dataset_from_directory的labels参数要求传入Python原生的列表/元组类型。当传入numpy数组时,函数内部的if labels not in ("inferred", None)判断会触发numpy数组与字符串的逐元素比较,导致逻辑歧义,最终抛出ValueError。
解决方案
只需将numpy数组格式的标签转换为Python原生列表或元组即可:
方法1:用tolist()转换(推荐)
修改标签编码代码,直接将numpy数组转为列表:
from sklearn.preprocessing import LabelEncoder encoder = LabelEncoder() # 将numpy数组结果转为Python列表 y_train = encoder.fit_transform(list(y_train["breed"])).tolist()
方法2:用list()包裹转换
也可以直接用list()包裹numpy数组完成转换:
y_train = list(encoder.fit_transform(list(y_train["breed"])))
额外注意事项
必须保证自定义标签的顺序与image_dataset_from_directory加载图片的顺序完全一致——也就是图片按路径字母数字排序后的顺序。如果你的y_train["breed"]对应的图片文件名本身就是按这个规则排列的,转换后直接使用即可;如果不是,需要先将图片文件名按规则排序,再对应匹配标签。
内容的提问来源于stack exchange,提问作者user19676560
相关产品推荐
相关产品推荐

