繁体   English   中英

TensorFlow 中图像分类模型的均方误差

[英]Mean Squared Error for image classification model in TensorFlow

我正在尝试教图像分类模型从图像中定义数字特征。 我确信 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 中定义回归问题的方法。

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

  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 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM