【问题标题】:Mean Squared Error for image classification model in TensorFlowTensorFlow 中图像分类模型的均方误差
【发布时间】:2020-09-02 10:31:58
【问题描述】:

我正在尝试教图像分类模型从图像中定义数字特征。我确信 SparseCategoricalCrossentropy 损失函数对我不起作用,至于训练我需要惩罚大差异而不是小差异。理想情况下,我想使用均方误差损失函数。

我使用 TensorFlow 教程准备模型 - https://www.tensorflow.org/tutorials/images/classification

类名对我来说是数字,我尝试了以下选项:

  • ['00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11 ', '12']
  • ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11 ', '12']

我对教程(数据集除外)所做的唯一更改是将 SparseCategoricalCrossentropy 损失函数交换为“mean_squared_error”。

但是损失函数显然对我不起作用。它返回的值会随着训练而变小,但准确率永远不会超过 5%,甚至会随着损失值变小而下降。结果也没有意义。数据很好,我可以使用 SparseCategoricalCrossentropy 损失函数轻松达到 95% 的准确率。我错过了什么?

更新:我认为我真正需要的是一种在 TensorFlow 中使用标有数字的图像来定义回归问题的方法。

【问题讨论】:

  • 我看到了。看来,我不需要分类损失。那我需要什么?是否可以在图像模型上使用回归损失?
  • “图像模型”是什么意思?损失由您尝试解决的问题类型定义;如果是分类问题,则不能使用MSE或其他适合回归的损失。
  • 我认为我需要一种在 TensorFlow 中使用标有数字的图像来定义回归问题的方法。
  • 这样,“9”和“2”之间的误差将大于“9”和“8”之间的误差。如果这是你想要的,听起来确实像一个回归问题。

标签: python tensorflow machine-learning computer-vision


【解决方案1】:

事实证明,将图像分类问题转化为回归问题非常容易。针对有问题引用的教程,我必须进行以下更改:

  1. 以数字作为“类”(文件夹名称)的不同数据集。

  2. 将损失函数更改为均方误差或其他适合回归的损失函数。

  3. 用只有 1 个神经元而不是类数(并且没有 softmax)为模型制作最后一层:

    ...
    layers.Dense(128, activation='relu'),
    layers.Dense(1)    # changed from num_classes to 1
    
  4. 改变了对预测结果的解释:

     ...
     predictions = model.predict(img_array)
     # score = tf.nn.softmax(predictions[0])    # correct for classification, but not regression
     score = predictions.flatten()[0]    # correct result for regression
     ...
    

【讨论】:

  • 但是您开始提出问题的基本前提“我正在尝试教授图像分类模型”不再成立,确实是吗?
  • 你是对的。如果我知道这些东西,我就不会在这里问了——我会自己弄清楚,因为它更快。我不想更新这个问题,因为我认为这很清楚,我看到很多人在寻找类似问题的答案但没有收到。我希望它会对某人有所帮助。
猜你喜欢
  • 1970-01-01
  • 2022-01-14
  • 2020-10-05
  • 2017-05-11
  • 2018-07-16
  • 2012-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多