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
相关产品推荐
相关产品推荐

