windows7系统下,tensorflow之mnist手写体识别

1.说明

当我们开始学习编程的时候,第一件事往往是学习打印"Hello World"。就好比编程入门有Hello World,机器学习入门有MNIST。因为只是机器学习的入门,所以MNIST可以很容易的在自己的笔记本上跑出来,但是中间会遇到一些问题,毕竟tensorflow在windows平台下时间还短。这里我把我遇到的问题和解决办法写出来,希望能帮助到遇到同样问题的伙伴。

2.运行环境
window7系统
Anaconda3(windows7 x64版本)
tensorflow for CPU(通过Anaconda3安装,python3.6.2)
电脑时间也不短了,还是用的windows7的系统,而且没有NIVADA显卡,只能装基于CPU版本的Anaconda。
3.借鉴相关博客
Anaconda3的安装借鉴了该博主的博客内容 Anaconda3的安装和汉化(http://www.cnblogs.com/honkly/p/7674527.html)

tensorflow的安装借鉴了另一位博主的博客内容Windows 7下通过anaconda安装tensorflow(http://blog.csdn.net/love666666shen/article/details/77099843)。这里注意在安装tensorflow的过程中,从清华大学镜像仓库下载时要选择合适的whl文件,这里原博主已给出清华大学镜像仓库的链接。

感谢两位博主的分享!

4.mnist手写体识别

遇到的没有解决的问题:
首先我准备根据tensorflow中文社区官网的内容一步一部做的时候,第一步就遇到了问题。官网给出的自动下载和安装数据集的脚本链接根本打不开。这个确实不知道为什么。

然后找到了极客学院的文章,MNIST机器学习入门http://wiki.jikexueyuan.com/project/tensorflow-zh/tutorials/mnist_beginners.html这里面脚本的链接是可以打开的。接下来运行脚本里的这部分代码,遇到了第二个问题,运行到某一步的时候出现这个提示:URLError: <urlopen error [WinError 10054] 远程主机强迫关闭了一个现有的连接。> 就是这样,在用代码直接从网站下载数据集的的时候被阻止了,查找了不少解决方法,有兴趣的可以尝试,我感觉有点麻烦就没有采用。

成功的方法:
经过查找对比各种文章内容,还有知乎大神的方案,慢慢摸索出了windows7下的完美运行的方法:

第一步:直接下载四个数据集。下载地址在这里https://github.com/wlmnzf/tensorflow-train/tree/master/mnist/Mnist_data注意下载之后不用解压,解压之后在运行程序的时候也会重新生成压缩文件,所以下载好之后不用管。

第二步:放在MNIST_data文件夹下。这个文件夹自己去新建一个就好,随便一个地方都行,有人想可不可以不用MNIST_data命名,我想应该是可以的(我没有尝试),当然改了之后的代码是要和这个文件夹名称一样的。下面这里我放在D盘里,如图所示。

其中的四个压缩文件就是下载的数据集,三个PY文件大家不用管,是我放的代码文件,不影响的。

第三步:读取数据,代码如下。

from tensorflow.examples.tutorials.mnist import input_data

MNIST_data_folder='D:/Documents/Python/MNIST/MNIST_data'

mnist=input_data.read_data_sets(MNIST_data_folder,one_hot=True)

注意第二行的代码很重要,这里我开始一直出错,因为windows系统还有python版本不一样,所以我这里的格式只有这样才不报错。大家把单引号里的内容改成自己的 MNIST_data 文件夹路径即可。

最后按照官网或者极客学院的讲解贴代码就可以了,我的代码如下。
from tensorflow.examples.tutorials.mnist import input_data
MNIST_data_folder='D:/Documents/Python/MNIST/MNIST_data'
mnist=input_data.read_data_sets(MNIST_data_folder,one_hot=True)
import tensorflow as tf
x = tf.placeholder(tf.float32, [None, 784])
W = tf.Variable(tf.zeros([784,10]))
b = tf.Variable(tf.zeros([10]))
y = tf.nn.softmax(tf.matmul(x,W) + b)
# Define loss and optimizer
y_ = tf.placeholder(tf.float32, [None, 10])
# The raw formulation of cross-entropy,
#
#   tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(tf.nn.softmax(y)),
#                                 reduction_indices=[1]))
#
# can be numerically unstable.
#
# So here we use tf.nn.softmax_cross_entropy_with_logits on the raw
# outputs of 'y', and then average across the batch.
cross_entropy = tf.reduce_mean(
    tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y))
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
sess = tf.InteractiveSession()
tf.global_variables_initializer().run()
# Train
for _ in range(1000):
  batch_xs, batch_ys = mnist.train.next_batch(100)
  sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
  # Test trained model
correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
print(sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels}))
输出结果如下:
Extracting D:/Documents/Python/MNIST/MNIST_data\train-images-idx3-ubyte.gz
Extracting D:/Documents/Python/MNIST/MNIST_data\train-labels-idx1-ubyte.gz
Extracting D:/Documents/Python/MNIST/MNIST_data\t10k-images-idx3-ubyte.gz
Extracting D:/Documents/Python/MNIST/MNIST_data\t10k-labels-idx1-ubyte.gz
0.9069
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值