图像分类模型在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)    # 从num_classes改为1
  4. 更改预测结果的解释方式:

     ... predictions = model.predict(img_array) # score = tf.nn.softmax(predictions[0])    # 适合分类,但不适合回归 score = predictions.flatten()[0]    # 适合回归的正确结果 ...

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注