iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 5
1
自我挑戰組

深度學習所需入門知識--一位初學者的認知系列 第 5

Anaconda Python 環境

Cash 思索了好一陣子,專案團隊都是精英,除了佳麗姐不是技術職的,但 Pete 會幫忙照顧,其他人不要把他們當作上電腦補習班的初學者,大約給個方向起個頭,他們就可以往下進行,遇到問題或困難,他在進一步講解。

那 Ubuntu 的指令不再往下細講,對他們最有用的就是讓他們可以安裝好 Python,然後在上面開始練習機器學習相關的程式。

原先他估計就直接請大家直接使用 Ubuntu 18.04預設安裝的 Python 3.6。慎重起見,還是研究了Tensorflow, PyTorch, MxNet 等等機器學習相關框架,發現許多被發表的一些深度學習模型教學程式或是範例支援的 Python 版本有 2.7 等版本,測試了一下許多都要相當的改寫才能於Python 3.6 跑。於是他也研究了 Python 常用的環境管理 virtualEnv, pyEnv, 以及 AnaConda ,看來這幾個框架安裝環境共通性最高的是 AnaConda,所以他決定先讓大家試著安裝一下 AnaConda。

不過毫無意外的大家還是針對為何採用 AnaConda 做了一番討論,Cash 依然用稍帶無賴的回應來取得共識:”我選另外一個,一定還有人問我為何不用 XXX。基本上都很好,趕快熟悉一個,未來要真是有需要用其他的,上手很快的。”

還有大家質疑怎麼Python2 陰魂不散,這麼多年了,為何 Python3 並沒有完全取代舊版。這個除了接受歷史的演變,似乎也無解。也許這個專案有能力的話,就幫忙將那些以 Python2 開發的模型程式改寫成 Python3 吧?

AnaConda 是完整版,預設就安裝了所有人可能用到的套件九成,所以變得很龐大;但它也有精簡版 miniConda,預設較少套件,需要的時候再以 pip install packageXYZ 來安裝即可。

昨天已經下載了 miniConda,他請大家再以 ssh 連上 Server:

cd ~/downloads #昨天已經利用 mkdir 建立目錄 downloads
sh Miniconda3-latest-Linux-x86_64.sh #用sh 來執行昨天下載的腳本

一連串的回答yes與 Enter,最後詢問要不要在.bashrc 將 conda 加入PATH,一樣yes,安裝成功,這樣就有了 Python 的基本執行環境。

必須先 exit 跳出後,在重新ssh 進 Server

conda update conda #更新 conda 內含的程式包
conda list #查看 conda 已經包含哪些程式包
conda env list #查看有哪些環境可用

進入最關鍵的使用環境,許多深度學習需要 python 3.6 的版本,我們就建立一個環境給他:

conda create --name py36 python=3.6 #在conda建立一個取名為 py36 的環境,
source activate py36 #啟動 py36這個環境

https://ithelp.ithome.com.tw/upload/images/20181019/201052834PWtAedRjV.png

python -V #檢查 Python 是否為 3.6
pip install -U pip #pip用來安裝Python 的程式包,此指令更新 pip 到最新板
pip install tensorflow #用pip 安裝tensorflow,相依的程式包也會幫忙一起安裝

又請大家 執行 python,進入 Python3.6 的提示 『>>>』請大家跑第一個Tensoflow 深度學習範例程式。
只要 Copy & Paste 下列程式碼到『>>>』即可執行

import tensorflow as tf
mnist = tf.keras.datasets.mnist

(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(),
  tf.keras.layers.Dense(512, activation=tf.nn.relu),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10, activation=tf.nn.softmax)
])
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

model.fit(x_train, y_train, epochs=5)
model.evaluate(x_test, y_test)

結果應該會出現類似

60000/60000 [==============================] - 6s 98us/step - loss: 0.2006 - acc: 0.9399
Epoch 2/5
60000/60000 [==============================] - 4s 67us/step - loss: 0.0813 - acc: 0.9752
Epoch 3/5
60000/60000 [==============================] - 4s 63us/step - loss: 0.0529 - acc: 0.9835
Epoch 4/5
60000/60000 [==============================] - 4s 69us/step - loss: 0.0368 - acc: 0.9883
Epoch 5/5
60000/60000 [==============================] - 5s 75us/step - loss: 0.0283 - acc: 0.9910
<tensorflow.python.keras.callbacks.History object at 0x7fe11c972f28>

再執行推理

model.evaluate(x_test, y_test)

結果為:

10000/10000 [==============================] - 0s 37us/step
[0.0703427215928532, 0.9794]

exit()
source deactivate #跳出剛剛進入的py36環境

他也請大家建立 Python 2.7 的環境,為未來準備

conda create --name py27 python=2.7

最後 Cash 請大家編寫自己的 Aliases,後續就不用打長長的指令,通常會把Alias放在『~/.bash_aliases』,『~』代表帳號所在home目錄;『.bash_aliases』是 Ubuntu預設放個人 Aliases 的地方。

nano ~/.bash_aliases #nano 是 Linux 其中的一個編輯器,也可以考慮用vi, vim。

alias py36='source activate py36'
alias py27='source activate py27'
alias deactivate='source deactivate'

編輯完,同時按下 CTRL 與 X 兩鍵(後續以 CTRL+X 簡稱 )再按 Y 同意儲存即可。

對於編輯器採 nano 又引發一些意見,為何是不vi 或是 vim。這個Cash就沒意見,因為他也只是因為習慣用 nano 編輯文字檔,覺得好上手就用了,而且這些指令都是 Ubuntu 預設就安裝好了,所以沒必要統一,依個人偏好。只不過才剛講完,佳麗馬上試用一下指令長度最短的 vi。

在Pete辛苦一番的指導中,佳麗驚奇感嘆:
”這一定是火星人科技,地球人誰能記得這麼奇葩的指令,按『i』才可以添加字元:結束要按 『ESC + : + q』”;

Pete 趕快請佳麗改用 nano,但是她依然繼續驚奇連連:
“要找個字串是按 『CTRL+W』;到最後一行是 『ALT+/』,我要飛回地球,這裡太危險了。”

對熟悉 Linux/Unix 相關系統的人而言,連上 Ubuntu Server 進行文字指令的操作並不會覺得難用,甚至有些狂熱份子宣稱那才是最有效率的作法。我們並不須如此厲害,但是要進入機器學習似乎九成以上的程式都是在 Linux 執行,無論是 Ubuntu 還是 CentOS 一開始都有點卡卡的,但是這是必經之路。

備註:

專案緣起記錄在 【UP, Scrum 與 AI專案】


上一篇
Ubuntu Server基本使用
下一篇
Python 基礎-Jupyter
系列文
深度學習所需入門知識--一位初學者的認知31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言