手写数字识别——Softmax Regression

    今天对照Tensorflow的书,实现了一个简单的手写数字识别的算法Softmax Regression。

    其中的mnist数据集,下载自http://yann.lecun.com/exdb/mnist/

   

from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

print(mnist.train.images.shape, mnist.train.labels.shape)
print(mnist.test.images.shape, mnist.test.labels.shape)
print(mnist.validation.images.shape, mnist.validation.labels.shape)

import tensorflow as tf

#设置session
sess = tf.InteractiveSession()
x = tf.placeholder(tf.float32, [None, 784])

#创建Softmax Regression模型中的weights和biases
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))

#Softmax Regression的公式
y = tf.nn.softmax(tf.matmul(x, W) + b)

#损失函数采用cross-entropy
y_ = tf.placeholder(tf.float32, [None, 10])
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y),
                                              reduction_indices=[1]))
#随机梯度下降的步长
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)

tf.global_variables_initializer().run()

for i in range(1000):
    batch_xs, batch_ys = mnist.train.next_batch(100)
    train_step.run({x: batch_xs, y_: batch_ys})

#判断是否准确
correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

#输入测试数据并进行评估
print(accuracy.eval({x: mnist.test.images, y_: mnist.test.labels}))

准确率达到91.7%

### 回答1: 手写数字识别是一个常见的计算机视觉问题,而使用softmax分类器可以有效地解决这个问题。 首先,我们需要明白softmax是一个常用的分类算法,适用于处理多分类问题。它可以将一组任意数字转换为概率分布,用于表示每个类别的可能性。 在手写数字识别中,我们可以将每个手写数字样本表示为一个向量,并将其输入到softmax分类器中进行训练和预测。分类器的输入是一个待分类的样本向量,而输出是一个概率分布向量,代表每个数字类别的可能性。 训练阶段,我们使用已经标注了正确类别的手写数字样本来训练分类器的参数。通常使用梯度下降等优化算法,根据样本的特征和真实标签来不断调整分类器的参数,以使得分类器能够更准确地区分不同的数字。 在预测阶段,我们使用训练好的分类器来对待分类的手写数字进行预测。输入待分类的样本向量,分类器会对每个类别都进行评估,通过softmax函数将评估结果转换为概率分布。最终,我们选择具有最高概率的类别作为预测结果。 softmax函数的数学表达式如下: softmax(x_i) = exp(x_i) / sum(exp(x_j)) 其中,x_i表示第i个类别的评估结果,exp(x_i)表示x_i的指数形式,sum(exp(x_j))表示所有类别评估结果的指数和。 综上所述,手写数字识别使用softmax分类器是一种有效的方法。它可以将手写数字样本转换为概率分布向量,用于表示每个数字类别的可能性,并且可以通过训练和预测阶段来实现准确的数字识别。 ### 回答2: 手写数字识别是指将手写数字图像识别为具体的数字,而softmax函数是在机器学习中常用的一种分类函数。手写数字识别使用softmax的原因是它能将输入的数据映射到0到1之间的概率值,从而方便对不同类别进行分类。 softmax函数将每个输入值转化为概率值,用于表示它属于每个可能类别的概率。在手写数字识别中,我们可以使用softmax来计算每个数字类别的概率分布。对于图像识别任务而言,输入是一个手写数字图像,我们通过对图像进行特征提取和处理,得到一个向量作为输入给softmax函数。 在手写数字识别任务中,我们使用一个包含多层神经网络模型,其中最后一层连接到softmax函数。该模型的前几层负责从图像中提取特征,最后一层则将这些特征用于分类。 在训练过程中,我们通过向模型提供已标注的手写数字图像和相应的数字类别来进行监督学习。模型会根据训练数据中的特征和标签之间的关系进行调整,以使得模型能够更好地对未标注图像进行预测。 使用softmax函数后,模型会根据输入的特征向量计算每个类别的概率值。概率最高的类别即被认为是模型对输入图像的分类结果。通过训练数据中的标签信息,模型调整其内部参数以最大化预测结果的准确性。 总之,手写数字识别使用softmax函数可以将手写数字图像的特征映射到概率上,方便进行分类。 ### 回答3: 手写数字识别是计算机视觉领域中的一项重要任务。为了解决这个问题,可以使用深度学习中的softmax函数。 softmax函数是一个常用的分类函数,通常用于将多个不同类别的概率分布转化为对应类别的概率值。在手写数字识别中,我们可以将每个手写数字的图像输入到神经网络中,并使用softmax函数来预测图像属于不同数字的概率。 假设我们有一张手写数字的图像,将其输入到一个具有多个神经元的输出层,每个神经元对应一个可能的数字类别。这些神经元的输出经过softmax函数处理后,会将其转化为一个表示概率的值。 具体来说,softmax函数会对输入的向量进行指数运算,然后将每个元素的指数值除以所有元素的指数值之和。这样可以保证输出的概率值总和为1,且每个概率值表示该输入属于某个类别的概率。 手写数字识别中,softmax函数可以将每个手写数字的图像所属的类别进行概率化,然后可以选择概率最高的类别作为预测结果。通过多次训练和调整,神经网络可以学习到不同数字的特征,并通过softmax函数对输入图像的特征进行分类和预测。 总之,手写数字识别使用softmax函数可以将神经网络的输出转化为对不同数字类别的概率,从而实现对手写数字图像的准确识别
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值