【问题标题】:Labels size different from target_names: Tensorflow Multi-Input Regression converting to Classification标签大小与 target_names 不同:Tensorflow 多输入回归转换为分类
【发布时间】:2019-11-23 14:29:16
【问题描述】:

我正在尝试将多输入混合输入(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 间卧室的房屋,为什么范围 [0,10) 不够?

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

用户警告:标签大小,6,与目标名称的大小不匹配,10 UndefinedMetricWarning:精度和 F 分数定义不明确,并且 在没有预测样本的标签中设置为 0.0。

我认为这可能是因为我的分类报告仅包含 1-6 间卧室的房屋。但我不确定 - 如果您能提供任何见解,我们将不胜感激。

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

【问题讨论】:

    标签: python tensorflow machine-learning keras


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2020-01-14
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      • 2019-01-24
      • 2018-12-26
      • 1970-01-01
      • 1970-01-01
      • 2019-05-19
      相关资源
      最近更新 更多