MAC下安装TensorFlow

内容直接参考了官网: https://www.tensorflow.org/install/

方法1: 下载编译好的包直接安装

pip install https://storage.googleapis.com/tensorflow/mac/tensorflow-0.5.0-py2-none-any.whl

验证:

$ python

>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print sess.run(hello)
Hello, TensorFlow!
>>> a = tf.constant(10)
>>> b = tf.constant(32)
>>> print sess.run(a+b)
42
>>>

方法2: 通过Anaconda进行安装

1.先下载并安装Anaconda, 中国大陆可以从: https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 下载, 速度很快. 注意选择对应版本, 安装包里的数字对应的就是python的版本号.

2.创建一个 conda 中名字为 tensorflow的运行环境:
$ conda create -n tensorflow pip python=2.7 # or python=3.3, etc.

3.激活conda的tensorflow环境:
$ source activate tensorflow
 (targetDirectory)$ # Your prompt should change
 (逆向操作:source deactivate)

4.使用下列命令在conda里的tensorflow环境中安装tensorflow:
(targetDirectory)$ pip install --ignore-installed --upgrade TF_PYTHON_URL
where TF_PYTHON_URL is the URL of the TensorFlow Python package.

例如, 下述命令将安装一个python 3, 只支持CPU运算的tensorflow版本:(targetDirectory)$ pip install --ignore-installed --upgrade \
https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-1.5.0-py3-none-any.whl

5.验证安装结果:
执行一个tensorflow小程序验证.

6.在conda tenforflow环境下额外安装pandas:
(targetDirectory)$ # pip install pandas

方法3: 下载源码到本地根据本地环境编译安装

环境准备:

Mac OS X 下环境搭建: 
1.从 app store 安装 xcode 
2.安装 Homebrew /usr/bin/ruby -e "$(curl -fsSL \  https://raw.githubusercontent.com/Homebrew/install/master/install)" 
3. 安装Bazel (Google开源的软件构建工具) brew install bazel 验证: bazel version 更新版本: brew upgrade bazel 
4. 安装SWIG 
brew install swig 注意: 你需要安装PCRE, 而不是 PCRE2. 
5. 安装Numpy,six,wheel
sudo pip install numpy six wheel

tenforflow的GPU计算只支持NVIDIA的显卡, 故MAC的机器不用考虑该部分内容.
(MAC)编译过程:

2.1 克隆TensorFlow仓库到本地

$ git clone --recurse-submodules https://github.com/tensorflow/tensorflow 

2.2 进入源码目录
$ cd tensorflow 

2.3 生成环境配置
$ ./configure
  (中文网站没有说到这一步, 但如果不执行的话, 会报找不到numpy)

2.4 编译并安装:

$ bazel build -c opt //tensorflow/tools/pip_package:build_pip_package

2.5 创建 pip 包
$ bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg

2.6 安装pip包
# .whl 文件的实际名字与你所使用的平台有关
$ pip install /tmp/tensorflow_pkg/tensorflow-0.5.0-cp27-none-linux_x86_64.whl

安装遇到的问题:

1. 从源码编译安装, 执行:

bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg

命令成功完成, 在执行命令的这个shell窗口, 可以以python里import tensorflow, 但是在其它的shell窗口, import tensorflow提示:

$ python

Python 2.7.13 (default, Mar 19 2017, 21:40:17) 

[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] on darwin

Type "help", "copyright", "credits" or "license" for more information.

>>> import tensorflow as tf

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

ImportError: No module named tensorflow

观察发现, 能成功import tensorflow的窗口打印的python版本信息为:

$ python
Python 2.7.13 (default, Apr 1 2017, 13:31:12) 
[GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.38)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>>

也就是说虽然看上去python版本都是2.7.13, 其实执行的环境并不一样.

pyenv打印出来的信息对比:

成功的shell窗口:

$ pyenv versions

  system

  2.7.10

* 2.7.13 (set by /Users/xxx/.pyenv/version)

失败的shell窗口: 

$ pyenv versions

* system (set by /Users/xxx/.python-version)

  2.7.10

  2.7.13

查看pyenv help, 发现通过pyenv local 来指定环境信息:

$ pyenv help local

Usage: pyenv local <version>

       pyenv local --unset

Sets the local application-specific Python version by writing the

version name to a file named `.python-version'.

When you run a Python command, pyenv will look for a `.python-version'

file in the current directory and each parent directory. If no such

file is found in the tree, pyenv will use the global Python version

specified with `pyenv global'. A version specified with the

`PYENV_VERSION' environment variable takes precedence over local

and global versions.

<version> should be a string matching a Python version known to pyenv.

The special version string `system' will use your default system Python.

Run `pyenv versions' for a list of available Python versions.

根据帮助内容, 简单粗暴地执行了如下命令:

$ export PYENV_VERSION=2.7.13

强制设置一个环境变量, 让python执行时使用: 

2.7.13 (set by /Users/xxx/.pyenv/version)

接下来再执行import tensorflow就正常了

$ pyenv versions

  system

  2.7.10

* 2.7.13 (set by PYENV_VERSION environment variable)

$ python

Python 2.7.13 (default, Apr  1 2017, 13:31:12) 

[GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.38)] on darwin

Type "help", "copyright", "credits" or "license" for more information.

>>> import tensorflow as tf

>>> 

 

TensorFlow 中文社区 MNIST学习笔记

本笔记内容整理自: http://www.tensorfly.cn/tfdoc/tutorials/mnist_beginners.html

官方例子: 辨识手写数字

要实现的功能: 从MNIST数据集中训练, 学习, 实现识别手写数字的功能.

模型思路:

每一张图片包含(28像素*28像素)。我们可以用一个数字数组来表示这张图片:

我们把这个数组展开成一个向量,长度是 28×28 = 784。

于是, 对于给定的一张图片, 可以通过矩阵将图片表示为: [x1, x2, … , x784].

通过神经网络, 将分别对这个矩阵数据进行加权运行, 加上一定的偏移量(bias), 计算出对应0-9的每个数字的概率是多少, 概率最大的那个就是神经经网络判断的结果.

所有步骤可以简化为:

1.

对[x1, x2, ..., x784]通过加权矩阵[W1,1, W1,2, ..., W1,784]计算, 加上偏移b1, 得到X这张图片数字为0的概率;

2.

对[x1, x2, ..., x784]通过加权矩阵[W2,1, W2,2, ..., W2,784]计算, 加上偏移b2, 得到X这张图片数字为1的概率;

3.

 ...... (分别计算为2,3,4,5,6,7,8的概率); 

4.

对[x1, x2, ..., x784]通过加权矩阵[W10,1, W10,2, ..., W10,784]计算, 加上偏移b9, 得到X这张图片数字为9的概率;

5.

得出概率最大的那个即为神经网络运算的结果, 同时如果概率要尽可能接近100%, 则表示结果可信度更好.

这里, 加权矩阵W[784,10], 以及偏移量矩阵b[1,10], 就是我们通过深度学习要挖掘出来的数据, 是我们所有训练, 测试所要达到的目标.

对于softmax回归模型可以用下面的图解释,对于输入的xs加权求和,再分别加上一个偏置量,最后再输入到softmax函数中:

 

其实就是:

y1=softmax(W1,1 * X1 +W1,2 * X2 +W1,3 * X3 + b1)

y2=softmax(W2,1 * X1 +W2,2 * X2 +W2,3 * X3 + b2)

y3=softmax(W3,1 * X1 +W3,2 * X2 +W3,3 * X3 + b3)

我们可以用向量表示这个计算过程:用矩阵乘法和向量相加。这有助于提高计算效率。(也是一种更有效的思考方式)

更进一步,可以写成更加紧凑的方式:

softmax函数的作用: 把Wx+b的输出空间映射到[0, 1]这个区间, 映射得到的值相当于统计意义上的概率, 不同输出值的大小相当于概率的大小.