最近 AlphaGo 擊敗南韓圍棋冠車的新聞相當火紅,

公司也舉辦了關於機器學習 (machine learning) 的內部比賽,正好藉這個機會來學習一下~

就先來安裝 Google 推出的 machine learning 軟體 TensorFlow 吧~

 

參考一下 TensorFlow: Download and Setup 這篇官方文章,有詳細的安裝介紹,

裡面提到了三種安裝方式,分別是 pip, virtualenv, 和 docker~

用 pip 安裝的話,會有點擔心 TensorFlow 會不會裝一些模組進來,打擾現有的 python 程式;

而 docker 的話是先不考慮,畢竟在 Mac 上的 docker 是跑在一個 Linux 的 VM 裡...

因此就來使用 virtualenv 的方式吧,之前就看過這東西了,正好來學一下如何使用 virtualenv~

 

一開始先裝了 virtualenv

但在看了 Python 的虛擬環境及多版本開發利器─Virtualenv 與 Pythonbrew 這篇之後,

決定移掉 virtualenv,改裝 virtualenvwrapper 這個套件,

這個套件裡面也包含了 virtualenv,但是包裝起來變的更好用~

 

1. 使用 pip 安裝 virtualenvwrapper

pip install virtualenvwrapper

 

2. 使用 virtualenvwrapper 建立虛擬 python 環境

選擇好一個目錄,執行 mkvirtualenv <name> 來建立一個虛擬的 python 環境~

這樣就會在目前目錄下,建立一個名為 <name> 的目錄,然後把相關的東西都放在裡面,

像是 python, pip, python 的 package 等等~

 

例如,我是在 ~/MyProjectsLocal/VirtualEnv 目錄下,執行 mkvirtualenv,

來建立一個叫作 TensorFlow 的環境:

testuser@localhost ~/MyProjectsLocal/VirtualEnv $ mkvirtualenv TensorFlow

New python executable in /Users/testuser/MyProjectsLocal/VirtualEnv/TensorFlow/bin/python2.7
Also creating executable in /Users/testuser/MyProjectsLocal/VirtualEnv/TensorFlow/bin/python
Installing setuptools, pip, wheel...done.
virtualenvwrapper.user_scripts creating /Users/testuser/MyProjectsLocal/VirtualEnv/TensorFlow/bin/predeactivate
virtualenvwrapper.user_scripts creating /Users/testuser/MyProjectsLocal/VirtualEnv/TensorFlow/bin/postdeactivate
virtualenvwrapper.user_scripts creating /Users/testuser/MyProjectsLocal/VirtualEnv/TensorFlow/bin/preactivate
virtualenvwrapper.user_scripts creating /Users/testuser/MyProjectsLocal/VirtualEnv/TensorFlow/bin/postactivate
virtualenvwrapper.user_scripts creating /Users/testuser/MyProjectsLocal/VirtualEnv/TensorFlow/bin/get_env_details

 

可以看到 virtualenvwrapper 幫我們在目錄裡面放了 pip, python 等等東西,

當環境建立好之後,平常就可以用 workon <name> 來切換虛擬 python 環境,

但得先執行下面兩行,用來設定 WORKON_HOME 這個環境變數,

同時讀入 virtualenvwrapper 定義的一些 shell function:

# Initialize virtualenvwrapper
export WORKON_HOME=~/MyProjectsLocal/VirtualEnv
source /usr/local/bin/virtualenvwrapper.sh

 

我是將上面兩行加在 Mac 的 ~/.bash_profile 檔案裡,這樣每次開 terminal 都會自動設定好~

 

3. 切換虛擬 python 環境

執行 workon <name> 來切換到想要的虛擬 python 環境,例如:

testuser@localhost ~ $ workon TensorFlow

(TensorFlow) testuser@localhost ~ $

 

在切換環境後,shell prompt 前面會加上 (<name>),提醒你現在是在虛擬 python 環境之下~

可以執行 lsvirtualenv 看看現在有哪些環境可用:

(TensorFlow) testuser@localhost ~ $ lsvirtualenv

TensorFlow
==========

 

用 virtualenvwrapper 的一個好處是有 tab 補完的功能,

所以像是在打 workon 之後,可以直接按 tab 鍵,就會列出所有的虛擬環境名稱,

如果只有一個的話,還會直接打上去,相當方便~

 

要離開虛擬環境的話,打 deactivate 就可以了:

(TensorFlow) testuser@localhost ~ $ deactivate

testuser@localhost ~ $

 

4. 在虛擬 python 環境中安裝 TensorFlow

在虛擬 python 環境下安裝東西一樣用 pip 就可以了,套件會安裝到虛擬環境的目錄下,

因此會跟系統原有的 python 分開,就不會影響到系統現有的 python 程式了~

參照 TensorFlow: Download and Setup 這邊的說明,用 pip 來安裝 TensorFlow:

(TensorFlow) testuser@localhost ~ $ pip install --upgrade https://storage.googleapis.com/tensorflow/mac/tensorflow-0.7.1-cp27-none-any.whl

Collecting tensorflow==0.7.1 from https://storage.googleapis.com/tensorflow/mac/tensorflow-0.7.1-cp27-none-any.whl
  Downloading https://storage.googleapis.com/tensorflow/mac/tensorflow-0.7.1-cp27-none-any.whl (11.6MB)
    100% |████████████████████████████████| 11.6MB 103kB/s
Collecting six>=1.10.0 (from tensorflow==0.7.1)
  Downloading six-1.10.0-py2.py3-none-any.whl
Collecting protobuf==3.0.0b2 (from tensorflow==0.7.1)
  Downloading protobuf-3.0.0b2-py2.py3-none-any.whl (326kB)
    100% |████████████████████████████████| 327kB 1.1MB/s
Requirement already up-to-date: wheel in ./MyProjectsLocal/VirtualEnv/TensorFlow/lib/python2.7/site-packages (from tensorflow==0.7.1)
Collecting numpy>=1.10.1 (from tensorflow==0.7.1)
  Downloading numpy-1.11.0-cp27-cp27m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (3.9MB)
    100% |████████████████████████████████| 3.9MB 327kB/s
Requirement already up-to-date: setuptools in ./MyProjectsLocal/VirtualEnv/TensorFlow/lib/python2.7/site-packages (from protobuf==3.0.0b2->tensorflow==0.7.1)
Installing collected packages: six, protobuf, numpy, tensorflow
Successfully installed numpy-1.11.0 protobuf-3.0.0b2 six-1.10.0 tensorflow-0.7.1

 

安裝好之後,用 pip freeze 看一下,

可以發現 TensorFlow 除了會安裝 tensorflow 模組外,

還會安裝像 numpy, protobuf, six 這幾個關聯模組:

(TensorFlow) testuser@localhost ~ $ pip freeze

numpy==1.11.0
protobuf==3.0.0b2
six==1.10.0
tensorflow==0.7.1

 

可以用 tensorflow.__file__ 看一下 TensorFlow 安裝的位置,

在我的電腦上,是在虛擬環境目錄下的 lib/python2.7/site-packages/tensorflow:

(TensorFlow) testuser@localhost ~ $ python -c 'import tensorflow; print tensorflow.__file__'

/Users/testuser/MyProjectsLocal/VirtualEnv/TensorFlow/lib/python2.7/site-packages/tensorflow/__init__.pyc

 

5. 執行 TensorFlow 的 Demo 程式

進到 tensorflow/models/image/mnist 目錄下,

執行 convolutional.py,就可以開始跑一個數字辨識的 demo 程式,

可以看到 Validation error 從原本的 84.6% 一路降低,

最後到 0.8% 就是這個演算法對這個測試集的極限了:

(TensorFlow) testuser@localhost ~ $ cd /Users/testuser/MyProjectsLocal/VirtualEnv/TensorFlow/lib/python2.7/site-packages/tensorflow/models/image/mnist/

(TensorFlow) testuser@localhost ~/MyProjectsLocal/VirtualEnv/TensorFlow/lib/python2.7/site-packages/tensorflow/models/image/mnist $ python convolutional.py

Extracting data/train-images-idx3-ubyte.gz
Extracting data/train-labels-idx1-ubyte.gz
Extracting data/t10k-images-idx3-ubyte.gz
Extracting data/t10k-labels-idx1-ubyte.gz
Initialized!
Step 0 (epoch 0.00), 4.9 ms
Minibatch loss: 12.054, learning rate: 0.010000
Minibatch error: 90.6%
Validation error: 84.6%
......
......

 

以上就是用 virtualenvwrapper 來安裝 TensorFlow 的步驟,

感覺上 virtualenvwrapper 還蠻好用的,應該可以善用來區別不同的開發環境囉~ 

 

參考資料:

Python 的虛擬環境及多版本開發利器─Virtualenv 與 Pythonbrew

 

文章標籤
創作者介紹

亂打一通的心情日記

ephrain 發表在 痞客邦 PIXNET 留言(0) 人氣()