Tensorflow实现MNIST手写数字识别(Softmax Regression)

1.加载MNIST数据集

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

注意:此处有可能报一大堆错误,如下:

TimeoutError                              Traceback (most recent call last)

TimeoutError: [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。

解决办法:
详见我的另一个帖子:http://blog.csdn.net/landcruiser007/article/details/79346982
解决报错后,出现如下说明成功:

Extracting 你的地址/MNIST_data/train-images-idx3-ubyte.gz
Extracting 你的地址/MNIST_data/train-labels-idx1-ubyte.gz
Extracting 你的地址/MNIST_data/t10k-images-idx3-ubyte.gz
Extracting 你的地址/MNIST_data/t10k-labels-idx1-ubyte.gz

2.查看MNIST数据集的情况

第一条代码:

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

出现:

(55000, 784) (55000, 10)

说明:
55000的含义:说明训练集有55000个样本。
784的含义: 图像为28*28像素的灰度图片,空白部分为0,有笔迹的地方0到1取值,总共28*28个点,即784维特征。
10的含义: 手写数字一共有0到9共10个。
测试集和验证集同理。
第二条代码:

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

出现:

(10000, 784) (10000, 10)

说明测试集有10000个样本。
第三条代码:

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

出现:

(5000, 784) (5000, 10)

说明验证集有5000个样本。
3.载入tensorflow库,并创建新的sess

import tensorflow as tf
sess=tf.InteractiveSession()

说明:
tensorflow所有的运算操作都在python外面,通过C++在CPU上运算完毕后,再传回python,因此需要定义一个sess,所有的运算都跑在这个sess里。
4.创建数据输入

x=tf.placeholder(tf.float32,[None,784])

说明:
placeholder是输入数据的地方。
括号内第一项参数为数据类型,这里是float32
第二项参数代表数据尺寸,None:不限制输入数据的数目
784:每个输入是784维的向量
5.实现Softmax Regression

w=tf.Variable(tf.zeros([784,10]))
b=tf.Variable(tf.zeros([10]))
y=tf.nn.softmax(tf.matmul(x,w)+b)

说明:
w:Softmax Regression中的weights
b:Softmax Regression中的biases
y:公式y=softmax(wx+b)
6.损失函数:cross entropy作为loss function

y_=tf.placeholder(tf.float32,[None,10])
cross_entropy=tf.reduce_mean(-tf.reduce_sum(y_*tf.log(y),reduction_indices=[1]))

7.使用随机梯度下降SGD算法开始训练

#学习速率0.5
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})

8.对模型正确率进行验证

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}))

结果:

0.919
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值