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

2024-05-14 08:54:14 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我使用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损失函数交换为“均方误差”

但是损失函数显然不适合我。它返回的值会随着训练而变小,但准确率永远不会超过5%,甚至会随着损失值变小而下降。结果也没有意义。数据很好,使用SparseCategoric交叉熵损失函数很容易达到95%的准确率。我错过了什么

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


Tags: 数据函数模型图像定义tensorflow分类教程
1条回答
网友
1楼 · 发布于 2024-05-14 08:54:14

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

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

相关问题 更多 >

    热门问题