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

tensorflow中image_dataset_from_directory返回标签为矩阵而非向量如何解决

问题根因

标签维度(batch_size, 3)和图像通道数无关联,是参数设置和数据集本身的特性共同导致的:

  • 你调用image_dataset_from_directory时设置了label_mode = 'categorical',该参数会自动把标签转换为*独热编码(one-hot encoding)*格式,编码的维度等于数据集的总类别数
  • 你使用的rockpaperscissors数据集刚好包含石头、剪刀、布3个分类,所以独热编码的维度固定为3,每个样本的标签会以[1,0,0]/[0,1,0]/[0,0,1]的格式对应三个不同分类

解决方法

可根据你的模型设计二选一:

方案1:直接使用现有标签格式

如果你的模型输出层采用softmax激活,损失函数使用CategoricalCrossentropy,现有标签格式可以直接用于训练,不需要修改任何数据加载代码,示例编译代码如下:

model.compile(
    optimizer='adam',
    loss=tfk.losses.CategoricalCrossentropy(),
    metrics=['accuracy']
)

方案2:切换为整数标签格式

如果你需要单维度的整数标签(比如用0/1/2直接指代三个分类),只需要把两个数据集加载代码中的label_mode = 'categorical'修改为label_mode = 'int'即可。修改后输出的标签维度会变为(batch_size,),对应损失函数需要调整为SparseCategoricalCrossentropy:

model.compile(
    optimizer='adam',
    loss=tfk.losses.SparseCategoricalCrossentropy(),
    metrics=['accuracy']
)

内容的提问来源于stack exchange,提问作者Da Ra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 00:24:11