人人都可以做深度学习应用:入门篇 (3)

深度学习的框架有各种各样的版本(Caffe、Torch、Theano等等),我只接触了Google的TensorFlow,因此,后面的内容都是基于TensorFlow展开的,它的详细介绍这里不展开讲述,建议直接进入官网查看。非常令人庆幸的是TensorFlow比较早就有中文社区了,尽管里面的内容有一点老,搭建环境方面有一些坑,但是已经属于为数不多的中文文档了,大家且看且珍惜。

TensorFlow 的中文社区

TensorFlow 的英文社区

3. TensorFlow环境搭建

环境搭建本身并不复杂,主要解决相关的依赖。但是,基础库的依赖可以带来很多问题,因此,建议尽量一步到位,会简单很多。

(1)操作系统

我搭建环境使用的机器是腾讯云上的机器,软件环境如下:

操作系统:CentOS 7.2 64位(GCC 4.8.5)

因为这个框架依赖于python2.7和glibc 2.17。比较旧的版本的CentOS一般都是python2.6以及版本比较低的glibc,会产生比较的多基础库依赖问题。而且,glibc作为Linux的底层库,牵一发动全身,直接对它升级是比较复杂,很可能会带来更多的环境异常问题。

(2)软件环境

我目前安装的Python版本是python-2.7.5,建议可以采用yum install python的方式安装相关的原来软件。然后,再安装 python内的组件包管理器pip,安装好pip之后,接下来的其他软件的安装就相对比较简单了。

例如安装TensorFlow,可通过如下一句命令完成(它会自动帮忙解决一些库依赖问题):

pip install -U tensorflow

这里需要特别注意的是,不要按照TensorFlow的中文社区的指引去安装,因为它会安装一个非常老的版本(0.5.0),用这个版本跑很多demo都会遇到问题的。而实际上,目前通过上述提供的命令安装,是tensorflow (1.0.0)的版本了。

img

Python(2.7.5)下的其他需要安装的关键组件:

tensorflow (0.12.1),深度学习的核心框架

image (1.5.5),图像处理相关,部分例子会用到

PIL (1.1.7),图像处理相关,部分例子会用到

除此之后,当然还有另外的一些依赖组件,通过pip list命令可以查看我们安装的python组件:

appdirs (1.4.0)

backports.ssl-match-hostname (3.4.0.2)

chardet (2.2.1)

configobj (4.7.2)

decorator (3.4.0)

Django (1.10.4)

funcsigs (1.0.2)

image (1.5.5)

iniparse (0.4)

kitchen (1.1.1)

langtable (0.0.31)

mock (2.0.0)

numpy (1.12.0)

packaging (16.8)

pbr (1.10.0)

perf (0.1)

PIL (1.1.7)

Pillow (3.4.2)

pip (9.0.1)

protobuf (3.2.0)

pycurl (7.19.0)

pygobject (3.14.0)

pygpgme (0.3)

pyliblzma (0.5.3)

pyparsing (2.1.10)

python-augeas (0.5.0)

python-dmidecode (3.10.13)

pyudev (0.15)

pyxattr (0.5.1)

setuptools (34.2.0)

six (1.10.0)

slip (0.4.0)

slip.dbus (0.4.0)

tensorflow (1.0.0)

urlgrabber (3.10)

wheel (0.29.0)

yum-langpacks (0.4.2)

yum-metadata-parser (1.1.4)

按照上述提供的来搭建系统,可以规避不少的环境问题。

搭建环境的过程中,我遇到不少问题。例如:在跑官方的例子时的某个报错,AttributeError: 'module' object has no attribute 'gfile',就是因为安装的TensorFlow的版本比较老,缺少gfile模块导致的。而且,还有各种各样的。(不要问我是怎么知道的,说多了都是泪啊~)

更详细的安装说明:Installing TensorFlow on Ubuntu

(3)TensorFlow环境测试运行

测试是否安装成功,可以采用官方的提供的一个短小的例子,demo生成了一些三维数据, 然后用一个平面拟合它们(官网的例子采用的初始化变量的函数是initialize_all_variables,该函数在新版本里已经被废弃了):

#!/usr/bin/python #coding=utf-8 import tensorflow as tf import numpy as np # 使用 NumPy 生成假数据(phony data), 总共 100 个点. x_data = np.float32(np.random.rand(2, 100)) # 随机输入 y_data = np.dot([0.100, 0.200], x_data) + 0.300 # 构造一个线性模型 # b = tf.Variable(tf.zeros([1])) W = tf.Variable(tf.random_uniform([1, 2], -1.0, 1.0)) y = tf.matmul(W, x_data) + b # 最小化方差 loss = tf.reduce_mean(tf.square(y - y_data)) optimizer = tf.train.GradientDescentOptimizer(0.5) train = optimizer.minimize(loss) # 初始化变量,旧函数(initialize_all_variables)已经被废弃,替换为新函数 init = tf.global_variables_initializer() # 启动图 (graph) sess = tf.Session() sess.run(init) # 拟合平面 for step in xrange(0, 201): sess.run(train) if step % 20 == 0: print step, sess.run(W), sess.run(b) # 得到最佳拟合结果 W: [[0.100 0.200]], b: [0.300]

运行的结果类似如下:

img

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zywszs.html