第2章 打造机器学习工具箱
本套书的前两本《Web安全之机器学习入门》和《Web安全之深度学习实战》,帮助大家了解了机器学习的基本知识,以及机器学习在实际安全问题中的应用,作为本套书的第三部,本书继续介绍强化学习等内容。在开启新的学习旅途之前,我们先介绍本书开发环境的搭建过程,包括Tensorflow、Keras和Anaconda,同时我们还会介绍强化学习经常使用的OpenAI Gym和Keras-rl环境的搭建,分类问题经常使用的XGBoost,其中Anaconda的第三方库的一键式安装令人印象深刻。
2.1 TensorFlow
TensorFlow是谷歌的第二代人工智能学习系统,其命名来源于本身的运行原理。Tensor意味着N维数组,Flow意味着基于数据流图的计算,TensorFlow为Tensor从流图的一端流动到另一端计算过程。所以也可以把TensorFlow用于将复杂的数据结构传输至人工智能神经网中进行分析和处理的过程。
TensorFlow可用于语音识别或图像识别等多项深度学习领域,是在2011年开发的深度学习基础架构DistBelief上进行了各方面的改进,它可在小到一部智能手机、大到数千台数据中心服务器的各种设备上运行。
TensorFlow支持非常丰富的安装方式。
1. Ubuntu/Linux
代码如下:
# 仅使用 CPU 的版本 $ pip install https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow- 0.5.0-cp27-none-linux_x86_64.whl # 开启 GPU 支持的版本 (安装该版本的前提是已经安装了 CUDA sdk) $ pip install https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow- 0.5.0-cp27-none-linux_x86_64.whl
2. Mac OS X
在Mac OS X系统上,我们推荐先安装homebrew,然后执行brew install python,以便能够使用homebrew中的Python安装TensorFlow,代码如下:
# 当前版本只支持 CPU $ pip install https://storage.googleapis.com/tensorflow/mac/tensorflow-0.5.0- py2-none-any.whl
当然Linux和Mac也可以直接使用默认版本安装:
pip install tensorflow
3.基于Docker的安装
该命令将启动一个已经安装好TensorFlow及相关依赖的容器:
$ docker run -it b.gcr.io/tensorflow/tensorflow
4.基于VirtualEnv的安装
官方文档推荐使用VirtualEnv创建一个隔离的容器来安装TensorFlow,这是可选方案,但是这样做能使排查安装问题变得更容易。VirtualEnv通过创建独立Python开发环境的工具来解决依赖、版本以及间接权限问题,比如一个项目依赖Django1.3而当前全局开发环境为Django1.7,版本跨度过大,导致不兼容使项目无法正常运行,使用VirtualEnv可以解决这些问题。
首先,安装所有必备工具:
# 在 Linux 上: $ sudo apt-get install python-pip python-dev python-virtualenv # 在 Mac 上: # 如果还没有安装 pip $ sudo easy_install pip $ sudo pip install --upgrade virtualenv
接下来,建立一个全新的VirtualEnv环境,为了将环境建在~/tensorflow目录下,执行:
$ virtualenv --system-site-packages ~/tensorflow $ cd ~/tensorflow
然后,激活VirtualEnv:
$ source bin/activate # 如果使用 bash $ source bin/activate.csh # 如果使用 csh (tensorflow)$ # 终端提示符应该发生变化
在VirtualEnv内,安装TensorFlow:
(tensorflow)$ pip install --upgrade <$url_to_binary.whl>
接下来,使用类似命令运行TensorFlow程序:
(tensorflow)$ cd tensorflow/models/image/mnist (tensorflow)$ python convolutional.py # 当使用完 TensorFlow (tensorflow)$ deactivate