如何解决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个神经元而不是类别数(并且没有softmax)将模型制作为最后一层:
... layers.Dense(128,activation='relu'),layers.Dense(1) # changed from num_classes to 1
-
更改了预测结果的解释:
... 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 ...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。