Keras flow_from_dataframe categorical模式标签类型不符报错咨询
解决
flow_from_dataframe中class_mode='categorical'的类型错误 咱们先把问题拆解开来看:你想用class_mode='categorical'处理多标签的独热编码列,但这个模式的设计逻辑和你当前的数据格式不匹配,才导致了报错。
问题根源
报错信息里说得很明确:当class_mode="categorical"时,y_col对应的列值需要是字符串、列表或元组类型的类别标签,而不是你现在用的0/1数值型独热编码数据。你把y_col设为['N','D','G','C','A','H','M','O']这些列,它们本质是已经处理好的独热编码维度,而非类别标签文本,这就和categorical模式的预期完全不符了。
正确的解决方案
针对已经是独热编码格式的多标签二维数组,你需要将class_mode改为'raw'——这个模式专门用来处理自定义的数值型标签数据,完美适配你现在的多标签独热列。修改后的代码如下:
train_generator_1 = train_data_gen.flow_from_dataframe( annotation, directory="data", target_size=(img_shape, img_shape), x_col="Left", y_col=['N','D','G','C','A','H','M','O'], class_mode='raw', # 这里替换为raw模式 shuffle=False, batch_size=batch_size, seed=7 )
额外补充
如果你的标签原本是类别名称(比如某一行的标签是['N', 'D']这样的多标签列表),那用class_mode='categorical'才是正确的,Keras会自动帮你转换成独热编码。但现在你的数据已经是现成的独热数值列,'raw'才是最适配的选择。
内容的提问来源于stack exchange,提问作者Talha Anwar
相关产品推荐
相关产品推荐

