0

0

MNIST手写数字分类:像素归一化后准确率低,问题出在哪儿?

心靈之曲

心靈之曲

发布时间:2025-03-22 10:44:16

|

1102人浏览过

|

来源于php中文网

原创

mnist手写数字分类:像素归一化后准确率低,问题出在哪儿?

TensorFlow MNIST分类:像素归一化后准确率低的原因及解决方案

在使用TensorFlow进行MNIST手写数字分类时,许多开发者可能会遇到一个难题:对数据集进行像素归一化处理后,模型训练准确率却异常低。本文将结合代码示例,深入分析此问题并提供解决方案。

问题根源在于对tf.nn.softmax_cross_entropy_with_logits函数的误用。原始代码中,预测值y_pred使用了tf.nn.softmax函数进行softmax概率计算:

y_pred = tf.nn.softmax(tf.matmul(x, w) + b)

然而,tf.nn.softmax_cross_entropy_with_logits函数期望输入的是线性输出(logits),而不是softmax概率。 将已进行softmax转换的y_pred传入该函数计算损失,导致了损失函数计算错误,进而影响模型训练效果。

解决方案:

koly.club
koly.club

一站式社群管理工具

下载

关键在于修改y_pred的计算方式,移除tf.nn.softmax函数:

y_pred = tf.matmul(x, w) + b

同时,在计算准确率时,需要对y_pred应用tf.nn.softmax函数以获得概率分布,以便与真实标签进行比较:

correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(tf.nn.softmax(y_pred), 1))

修改后的代码片段如下(假设部分代码已存在):

# ... (导入包和设置超参数的代码部分保持不变)

# 下载数据集
mnist = input_data.read_data_sets('original_data/', one_hot=True)

train_img = mnist.train.images
train_label = mnist.train.labels
test_img = mnist.test.images
test_label = mnist.test.labels
train_img /= 255.0
test_img /= 255.0

X = tf.compat.v1.placeholder(tf.float32, shape=[None, inputSize])
y = tf.compat.v1.placeholder(tf.float32, shape=[None, numClasses])
W = tf.Variable(tf.random_normal([inputSize, numClasses], stddev=0.1))
B = tf.Variable(tf.constant(0.1), [numClasses])
y_pred = tf.matmul(X, W) + B  # 修改:移除softmax

loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y, logits=y_pred)) + 0.01 * tf.nn.l2_loss(W)
opt = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)

correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(tf.nn.softmax(y_pred), 1)) # 修改:在计算准确率时应用softmax
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

saver = tf.train.Saver()
multiclass_parameters = {}

# ... (运行代码部分保持不变)

通过以上调整,tf.nn.softmax_cross_entropy_with_logits函数将接收正确的线性输出,计算出正确的损失值,从而使模型有效训练并获得更高的准确率。 这再次强调了正确理解和使用TensorFlow函数对于构建高效深度学习模型的重要性。

相关专题

更多
Python AI机器学习PyTorch教程_Python怎么用PyTorch和TensorFlow做机器学习
Python AI机器学习PyTorch教程_Python怎么用PyTorch和TensorFlow做机器学习

PyTorch 是一种用于构建深度学习模型的功能完备框架,是一种通常用于图像识别和语言处理等应用程序的机器学习。 使用Python 编写,因此对于大多数机器学习开发者而言,学习和使用起来相对简单。 PyTorch 的独特之处在于,它完全支持GPU,并且使用反向模式自动微分技术,因此可以动态修改计算图形。

24

2025.12.22

Python 深度学习框架与TensorFlow入门
Python 深度学习框架与TensorFlow入门

本专题深入讲解 Python 在深度学习与人工智能领域的应用,包括使用 TensorFlow 搭建神经网络模型、卷积神经网络(CNN)、循环神经网络(RNN)、数据预处理、模型优化与训练技巧。通过实战项目(如图像识别与文本生成),帮助学习者掌握 如何使用 TensorFlow 开发高效的深度学习模型,并将其应用于实际的 AI 问题中。

33

2026.01.07

c++ 根号
c++ 根号

本专题整合了c++根号相关教程,阅读专题下面的文章了解更多详细内容。

17

2026.01.23

c++空格相关教程合集
c++空格相关教程合集

本专题整合了c++空格相关教程,阅读专题下面的文章了解更多详细内容。

22

2026.01.23

yy漫画官方登录入口地址合集
yy漫画官方登录入口地址合集

本专题整合了yy漫画入口相关合集,阅读专题下面的文章了解更多详细内容。

91

2026.01.23

漫蛙最新入口地址汇总2026
漫蛙最新入口地址汇总2026

本专题整合了漫蛙最新入口地址大全,阅读专题下面的文章了解更多详细内容。

124

2026.01.23

C++ 高级模板编程与元编程
C++ 高级模板编程与元编程

本专题深入讲解 C++ 中的高级模板编程与元编程技术,涵盖模板特化、SFINAE、模板递归、类型萃取、编译时常量与计算、C++17 的折叠表达式与变长模板参数等。通过多个实际示例,帮助开发者掌握 如何利用 C++ 模板机制编写高效、可扩展的通用代码,并提升代码的灵活性与性能。

14

2026.01.23

php远程文件教程合集
php远程文件教程合集

本专题整合了php远程文件相关教程,阅读专题下面的文章了解更多详细内容。

65

2026.01.22

PHP后端开发相关内容汇总
PHP后端开发相关内容汇总

本专题整合了PHP后端开发相关内容,阅读专题下面的文章了解更多详细内容。

59

2026.01.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Git 教程
Git 教程

共21课时 | 2.9万人学习

Git版本控制工具
Git版本控制工具

共8课时 | 1.5万人学习

Git中文开发手册
Git中文开发手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号