标签大小与target_names不同:Tensorflow多输入回归转换为分类

时间:2019-07-14 19:14:32

标签: python tensorflow machine-learning keras

我正在尝试将多输入混合输入(txt,图像)keras模型从回归输出(房价)转换为分类输出(卧室数量)。特别是,我正在更改本教程

https://www.pyimagesearch.com/2019/02/04/keras-multiple-inputs-and-mixed-data/

成为分类器。关于类别的数量,我有几个技术问题,并且还会出现一个我不完全理解的错误。

我将网络的最后一层更改为softmax:

x = Dense(11, activation="softmax")(x)

但是我只有10个类别(数据集涵盖具有1-10个卧室的房屋)。但是使用Dense(10,...),我得到以下错误:

  

InvalidArgumentError:接收到的标签值10在有效范围[0,10)之外。标签值:3 2 5 2 10 3 2 5

我理解该错误以及如何避免该错误,但是为什么[0,10)范围不够大,因为我没有0房的房子?

当我尝试获取分类报告时,会收到两个警告:

  

UserWarning:标签大小为6,与target_names大小为10不匹配   UndefinedMetricWarning:精度和F分数定义不正确,   在没有预测样本的标签中将其设置为0.0。

我认为这些可能是因为我的分类报告仅包含1-6间卧室的房屋。但不确定-您能提供的任何见解都会受到赞赏。

我的代码和数据集可以从这里克隆: https://github.com/davidrtfraser/blog-keras-multi-input

1 个答案:

答案 0 :(得分:1)

通常在机器学习中,将N个类的标签编码为0到N-1范围内的整数,因为这直接从类索引映射,因此您可以使用argmax从模型输出中恢复它们。

因此,您需要以相同的方式对标签进行编码,最简单的方法是通过从每个标签中减去一个来将[1, 10]标签减去到[0, 9],并从模型输出,则在输出标签上添加一个。