手写数字识别(2.1):Linux环境部署及Tensorflow框架的构建(举个梯度下降优化器的栗子)

上一篇关于OCR字符识别,用的一般的数字图像处理的方法以及经典监督式分类器KNN进行模型构建,虽然实时性比较高,但是却不能作为大规模识别方法,显然我的数据是不够的。

 

 

 后面的内容,我打算完善OCR手写数字识别这个模块,借助编程框架Tensorflow于linux上采用几种主流的深度学习算法实现MNIST数据集的完美分类。既然是项目,那就必须要做些实用性的东西,开发一个web接口服务器(支持AJAX请求、数据持久化、用户认证,任务队列,数据文件上传等功能),与深度学习的服务相结合,开发一个图像识别系统,搭建一个小型完备的深度学习服务云平台。

今天讲第一步:准备工作,关于linux学习深度学习的几个建议。

Tip1:使用linux(Ubuntu为例),一定要关闭客人会话

ubuntu中的客人模式是个很烦人的东西,其本意是保护隐私的设计,当经常不小心开启而且你还关不掉。所以,干脆关了它!关闭方法很简单:
1. 进入tty1控制台(ctrl+alt+f1),root省份登录

2. 使用Vi编辑器配置文件:sudo vi /etc/lightdm/lightdm.conf

3. 编辑文件(i键进入编辑模式,Esc键退出编辑)

[SeatDefaults]

greeter-session=unity-greeter

allow-guest=false

4. Esc后,输入“:”,按“x”退出并保存

5.重启系统:sudo reboot

Tip2:Anaconda是搭建深度学习环境的首选

理由:

1. 虽然ubuntu系统自带Python,当有时候为了后面搭建环境的要求,版本不匹配,那就要自行安装一个版本,自行安装版本你不管还好,要是你修改默认Python版本操作失误了,极有可能出现打开不了终端的情况(ctrl+alt+T)。(补救办法:其实就是重命名文件,比如ubuntu16.04自带3.5版本的Python,你安装了3.6版本的,那么需要在tty1终端下,进入路径 /usr/lib/python3/dist-packages/gi/, ls查看目录,将里面的_gi_cairo.cpython-35m-x86_64-linux-g文件和_gi.cpython-35m-x86_64-linux-gnu.so文件需要重命名或复制一份为:_gi_cairo.cpython-36m-x86_64-linux-g和_gi.cpython-36m-x86_64-linux-gnu.so,然后重启即可)用Anaconda的话,几乎都是自动设置好的,包括后面需要的大部分python已来包都给安装好了。

2.可以conda创建虚拟环境,在不同的虚拟环境中,你可以安装不同的框架,而且彼此互不影响(python解释器的路径不同罢了),比如我创建了三个虚拟环境,分别装上了caffe,tensorflow,theano三个学习框架,本文记录的项目使用Tenserflow框架,不过Tensorflow也有不合适的地方,比如不支持双向RNN和3D卷积神经网络,而Theano则提供了较好的支持。

关于Anaconda和Tensorflow的安装,这里我就不说了,网上教程太多太多了,只不过注意的是,版本一定要匹配,否则import tensorflow的时候会报错,这里可以参考这个来选择版本:https://github.com/lakshayg/tensorflow-build

另外,如果提示你CPU还有待优化项,别管他,直接屏蔽建议就行,不影响程序执行

import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'

Tensorflow入门级案例

这个是我在一段程序中截取出来的,可以很好地表达Tensorflow用法:

import tensorflow as tf
import numpy as np

#使用numpy生成100个随机点
x_data=np.random.rand(100)
y_data=x_data*0.1+0.2

#构造一个线性模型
b=tf.Variable(0.0)       #初始化为0
k=tf.Variable(0.0)
y=k*x_data+b

#二次代价函数
loss=tf.reduce_mean(tf.square(y_data-y))
#定义一个梯度下降法来进行训练的优化器
optimizer=tf.train.GradientDescentOptimizer(0.2)        #梯度下降优化其器,学习率为0.2
#最小化代价函数(越小越好)
train=optimizer.minimize(loss)

init=tf.global_variables_initializer()

with tf.Session() as sess:
    sess.run(init)
    for step in range(201):       #迭代200次
        sess.run(train)
        if step%20==0:           #每20次打印k和b的值
            print(step,sess.run([k,b]))   #k越来越接近0.1,b越来越接近0.2

Tensorflow与一般python写代码的主要区别就是它要先定义图和op,再去执行操作。例子其实就是一个线性关系的拟合,使用了Tensorflow封装好的梯度下降方法作为优化器(想知道算法原理可以去看老周的机器学习西瓜书),最后迭代200次,每20次打印一下k和b的值,最后结果这样

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值