基於Ubuntu+Python+Tensorflow+Jupyter notebook搭建深度學習環境
前言一、環境準備環境介紹軟體下載VMware下安裝UbuntuUbuntu下Anaconda的安裝二、Xshell遠端連線Ubuntu系統三、Jupyter notebook伺服器的配置及遠端訪問四、遠端環境的測試Tensorflow軟體庫的安裝簡單爬蟲資料視覺化基於神經網路實現fashion_mnist圖片的識別總結
前言
如今,人工智慧、深度學習等高深知識逐漸融入大家的視野,小大驗證碼的識別,大到無人駕駛技術等都離不開深度學習。迎合時代的腳步,跟上技術的潮流,開始學習深度學習首先需要搭建深度學習環境。搭建環境的方式也有不少,本文主要是介紹,基於Ubuntu+Python+Tensorflow+Jupyter ntebook來搭建環境,以便開始深度學習之旅。該文主要從以下幾個部分的內容來進行介紹:
- 環境準備
- Xshell遠端連線Ubuntu
- Jupyter notebook伺服器的配置及遠端訪問
- 深度學習遠端環境的測試
OK,話不多說,開始進入正軌吧。(#`O′)
一、環境準備
環境介紹
- 準備兩臺計算機,一個作為服務端,一個作為客戶端,通過客戶端遠端連線服務端的深度學習環境。
- 服務端:Linux系統(Ubuntu),也可根據自身需求使用其他Linux系統。
Ubuntu介紹:Ubuntu(友幫拓、優般圖、烏班圖)是一個以桌面應用為主的開源GNU/Linux作業系統,Ubuntu 是基於Debian GNU/Linux,支援x86、amd64(即x64)和ppc架構,由全球化的專業開發團隊(Canonical Ltd)打造的。
Linux系統區別於windows系統最大的區別是其主要是利用終端 Shell 命令來進行一系列的操作,所以在實際使用過程中常常用來搭建伺服器,該系統搭建在VMware虛擬機器中。 - 客戶端:Windows10系統
這個大家再熟悉不過了,就不介紹了。 - Anaconda
Anaconda介紹:Anaconda指的是一個開源的Python發行版本,其包含了conda、Python等180多個科學包及其依賴項。所以說,當我們下載了Anaconda之後就不必要再下載Python其他包了,其內部整合了大量大Python工具,其中就包括我們這篇文章的主角Jupyter notebook。 - Xshell
這個就沒什麼好說的了,它主要是一種遠端連線的工具,使用它之後我們就可以通過ssh協議來遠端連線Ubuntu系統了,而且它常常與遠端檔案傳輸工具Xftp配套使用。
軟體下載
這裡給大家兩種方式進行下載,一個是官網下載,如果官方下載比較慢的可以在下方網盤進行下載,大家根據自己的方便下載即可。
官網:
- Anaconda:https://www.anaconda.com/download/,於服務端下載
- Xshell:https://xshell.en.softonic.com/?ex=BB-682.0,於客戶端下載
- Ubuntu:https://www.ubuntu.com/download/desktop,於服務端下載
- VMware:https://www.vmware.com/,於服務端下載
網盤:
- Anaconda:https://pan.baidu.com/s/1k8JdX5vo62j_I1jAy3Airw, 密碼:bhfv,於服務端下載
- Xshell:https://pan.baidu.com/s/1KKqsFrhbPUM2Yc_Jukm5sw, 密碼:fi0y,於客戶端下載
- Ubuntu:https://pan.baidu.com/s/1Zwz1GGlEtlStnS-5OFsecQ, 密碼:50yw,於服務端下載
- VMware:https://pan.baidu.com/s/1-h0HLJGrXbJjwzfU5I2rww, 密碼:hjnq,於服務端下載
VMware下安裝Ubuntu
注意:以下內容都是在服務端計算機中進行配置
在VMware虛擬機器下安裝Ubuntu系統雖然有點步驟,也需要點時間,但是並不複雜。在綜合考慮到時間成本與其給大家帶來的價值的關係下,博主就用文字描述了,暫時不貼圖了。但是你不必擔心,關鍵步驟還是會貼圖說明的,大家根據下方的流程搭建安裝即可 ( ﹁ ﹁ ) ~→。
- 在服務端下載好VMware及Ubuntu之後。首先開啟VMware你會發現他會讓你輸入VMware祕鑰,以下將給出幾個目前有效的祕鑰,當你使用的時候也許已經失效了,你可以自行查詢可用的祕鑰即可:
FF31K-AHZD1-H8ETZ-8WWEZ-WUUVA
CV7T2-6WY5Q-48EWP-ZXY7X-QGUWD
ZY5H0-D3Y8K-M89EZ-AYPEG-MYUA8
ZC5XK-A6E0M-080XQ-04ZZG-YF08D
ZY5H0-D3Y8K-M89EZ-AYPEG-MYUA8
複製程式碼
- 輸入祕鑰之後 ,進入到了VMware的頁面了,這個時候我們需要用到在之前下載好的Ubuntu映象檔案了,在VMware中新建一個虛擬機器,流程如下:
以上便是VMware下安裝Ubuntu的全流程,如果在安裝過程中有什麼問題歡迎聯絡作者或在下方留言。
Ubuntu下Anaconda的安裝
在VMware下安裝好Ubuntu後,雖然Ubuntu內自帶了Python,但是其版本一般是2.7的,而且許多常用的工具包並沒用整合,所以我們還需要安裝Anaconda(一招解千愁),如果熟悉Java的話,Anaconda就類似Maven一樣的存在。我們根據以上介紹的Anaconda的下載方式在Ubuntu下載好Anaconda之後,進入到其目錄之下(或者cd操作),然後開啟終端,執行如下命令來進行安裝:
bash Anaconda3-5.3.1-Linux-x86_64.sh # 不要盲目的複製貼上,根據自己所下載的Anaconda版本執行
複製程式碼
執行之後會有一些列諸如同意協議之類的問題,我們直接預設預設選項即可(直接Enter,或者yes),直到出現Anaconda環境變數配置的顯示(不要無腦yes過頭了),我們需要選擇將其加入到環境變數中去。一系列操作之後,我們關閉終端然後在重新開啟終端,然後在終端分別執行conda list、python命令,如果你的終端介面出現類似以下輸出,則恭喜你說明你已經完成了anaconda的安裝。
這裡再說明一點:而如果你的終端輸錯報錯(未找到conda命令之類的)或者Python版本為2.7,那就說明你以上操作中未將Anaconda加入到環境變數(yes過頭),所以你需要手動配置Anaconda的環境變數,操作如下:
開啟環境變數的配置檔案,從這裡我們就可以看出Linux和Windows下的操作的區別了(windows一般是通過介面的形式進行設定,而Linux下則大多數通過終端並使用vim進行配置)
# 開啟環境變數的配置檔案,從這裡我們就可以看出Linux和Windows下的操作的區別了
# windows一般是通過介面的形式進行設定,而Linux下則大多數通過終端並使用vim進行配置
sudo vim gedit /root/.bashrc
複製程式碼
開啟檔案之後我們需要在檔案末尾新增如下內容(需要熟悉vim操作),其中XXX為你的Anaconda的bin目錄,例如我的是/home/lxj/anaconda3/bin
export PATH="XXX:$PATH" # XXX為你的Anaconda的bin目錄,例如我的是/home/lxj/anaconda3/bin
複製程式碼
然後儲存(Esc -> shift+: -> wq -> 回車),在終端輸入source ~/.bashrc進行更新即可完成Anaconda環境變數的配置,不出意外的話再次分別執行Python、conda list命令之後你會看見conda包的列表以及Python3.7的輸出了。
補充:這裡額外說明一下,以上的操作是使用Vim進行檔案編輯的,他不同於windows下的記事本等,而是通過特定的操作來對檔案進行編輯。對於熟悉Vim操作的應該會理解以上Anaconda環境變數的配置,然而如果是對Vim比較陌生的朋友可能會卡殼,所以在這裡簡單介紹一些vim的操作:
在終端使用vim命令之後將會進入到vim的介面,此時的介面是不允許modify任何內容的,只允許read only。此時我們輸入i將會進入到vim的編輯模式,現在就能對該檔案進行修改了。檔案內容修改完成之後,我們需要退出該vim編輯模式,vim 的退出常用的有以下幾種(首先輸入Esc鍵):
- q! -> 不儲存檔案修改並退出
- wq -> 儲存檔案的修改並退出
- wq! -> 有時候我們需要root許可權才能編輯檔案,使用該命令之後就能夠強制修改並退出。
對於以上Anaconda環境變數的配置,vim的熟悉至此就足夠了,順便介紹一下其他常用的命令供大家參考
- read模式下雙擊d -> 刪除當行內容
- Ctrl+b -> 內容向前移動一頁
- ctrl+f -> 內容向後移動爺爺
- shift+g -> 滑鼠指標定位到最後
常用的就是以上一些了,其他的操作有需要的自行學習
注意:以上內容都是在服務端計算機中進行配置
至此,我們已經完成了環境的搭建,接下來我們介紹一下如何使用Xshell遠端連線Ubuntu操作
二、Xshell遠端連線Ubuntu系統
注意:以下內容都是在客戶端計算機中進行配置
安裝好Anaconda之後,我們需要通過Xshell使用Xshell來遠端連線我們的Ubuntu系統,此時我們的目標需要轉移至客戶端了。
首先在以上軟體下載中根據連結下載Xshell,之後Windows傻瓜式安裝好Xshell(順便把Xftp安裝下,與Xshell配套使用的,雖然在本文中使用不到)。之後的操作會有幾個坑,但是不必擔心,下面會詳細帶你一個一個的填掉 o(*≧▽≦)ツ┏━┓。
坑一:連線失敗
我們雙擊開啟Xshell,並點選檔案並新建,然後根據如下圖進行操作:
補充,上方中的主機屬性是填Ubuntu的ip地址,該地址可在Ubuntu的終端執行ifconfig(windows是ipconfig)命令得到。
以上資訊填寫完之後在出現的介面輸入自己Ubuntu下的使用者登入密碼即可。
執行之後你會發現連線失敗,此時我們需要檢查一下Ubuntu是否與客戶端處於同一網段下,可以將Ubuntu設定成橋接模式(右鍵Ubuntu虛擬機器然後進行設定,一般用於有線連線情況)或者使用Nat模式(用於無線),之後再次檢查一下客戶端(Windows10)是否能夠ping通服務端(Ubuntu),在客戶端的cmd中執行如下:
ping XXX.XXX.XXX.XXX # XXX.XXX.XXX.XXX為服務端的ip
複製程式碼
在以上操作之後,一般就能ping通了,如果失敗了則在Ubuntu終端下執行sudo wfw disable命令關閉防火牆。
坑二:連線失敗 (ノへ ̄、)
在如上操作之後,我們再次嘗試重新連線。我們可以發現依然連線失敗,顯示拒絕連線之類的資訊。這是因為Xshell是通過ssh協議來連線Ubuntu的,但是Ubuntu預設是沒有開啟ssh服務的,所以我們需要在其終端執行如下命令來開啟ssh服務:
sudo service ssh restart
複製程式碼
之後我們再次嘗試連線。
坑三:連線失敗 (ノへ ̄、) (ノへ ̄、)
一般來講,這個時候依然是連線失敗,因為在預設情況下Ubuntu未安裝ssh服務,此時我們需要在Ubuntu下安裝ssh服務,執行以下命令進行安裝:
sudo apt-get install openssh-server
複製程式碼
待其安裝好後,我們再再再次連線Ubunut。如果無法安裝,則需要執行apt-get update進行更新,更新之前如果出現無法獲得鎖相關的報錯資訊,則執行如下命令斷開apt程式後再次更新:
# 檢視apt相關程式
ps aux |grep apt
# 然後把apt程式殺掉
kill -9 程式號
# 重新更新apt-get
apt-get update
複製程式碼
以上坑踩過之後也該連線成功了吧。的確此時你將成功連線到Ubuntu了,之後Xshell將開啟一個終端,這個終端就是Ubuntu下的終端了,也就是說我們可以使用該終端控制Ubuntu了,並對其進行Shell操作。ヽ(✿゚▽゚)ノ
三、Jupyter notebook伺服器的配置及遠端訪問
由於我們在之前已經安裝過了Anaconda,所以此時的Ubuntu就已經整合了ipython 以及jupyter-notebook(Anaconda就是這麼的強大)。對此,我們將通過Xshell遠端連線Ubuntu來搭建Jupyter notebook的伺服器,並對其進行遠端訪問。
- 在終端中啟動ipython或者python,然後執行以下命令
from IPython.lib import passwd
passwd()
複製程式碼
上述命令執行之後將會在終端顯示設定密碼,方便起見,在這我們將密碼設定成:123,之後enter並確認即可完成密碼的設定。
注意:這裡的密碼是暗文的形式,輸入之後不會顯示的,還有此時你輸入的密碼需要記住,因為我們待會遠端訪問Jupyter notebook伺服器的時候需要用到該密碼進行登入
密碼輸入之後,我們將會看到有一個較長字串,該字串是上述密碼的一個加密形式,我們需要將其複製下來,在之後的ipython_notebook_config.py檔案的設定中需要使用,操作結果如下圖所示:
- 隨後為了方便上述加密密碼字串的記錄,我們在此開啟另一個終端(這也是Xshell的方便所在),然後使用如下命令建立一個伺服器名,比如,在此我們將該名字設定為:XXX
ipython profile create XXX
複製程式碼
在上述伺服器名建立完成之後,將在終端輸出兩個py檔案(ipython_config.py、ipython_kernel_config.py)路徑,之後使用如下cd命令我們進入到.ipython路徑cd ./.ipython。具體操作圖示如下:
- 進入.ipython目錄之後使用ls命令將會列出上述建立的兩個py檔案所在,但是我們需要再額外建立一個py配置檔案並對其進行設定,在這裡我們使用vim來進行操作,關於vim的使用,上述的Anaconda環境配置過程中已經介紹了,遺忘的朋友可以返回看一看再熟悉一下。熟悉之後我們完成如下步驟:
cd .ipython/profile_txj
vim ipython_notebook_config.py
複製程式碼
進入到vim環境之後我們在ipython_notebook_config.py檔案中編輯如下內容,主要是配置notebook的登入密碼(加密後的形式)以及服務的開放埠:
c = get_config()
c.IPKernelApp.pyalb = "inline"
c.NotebookApp.ip = "*"
c.NotebookApp.open_browser = False
c.NotebookApp.allow_root = True
c.NotebookApp.password = u"加密後的密碼" # 這裡我們需要使用上述加密後的密碼,在另一個終端可見
c.NotebookApp.port = 8888 # 在這裡,我們需要設定一個jupyter-notebook的埠,儘量設定的少見點,以免造成埠衝突
複製程式碼
編輯好後,wq命令儲存並退出。
- 在上述一切操作完成之後,我們現在來開啟該伺服器,新建一個終端並執行如下命令
jupyter notebook --config=【你的ipython_notebook_config.py檔案路徑】
# 例如/home/lxj/.ipython/profile_XXX/ipython_notebook_config.py
複製程式碼
在上述命令執行之後,如果出現如下圖片所示內容,則說明我們的服務端已經正常啟動
- 在服務端啟動完成之後,我們在客戶端開啟瀏覽器,訪問XXX.XXX.XXX.XXX:8888(ubuntu的ip加開放的埠)試試,看看能否正常請求。如果隨後出現一個如上所示的Jupyter notebook的登入頁面,那麼恭喜你,至此Jupyter notebook伺服器配置完成,並能夠遠端訪問了。在表單中輸入你所設定的密碼(上面第一步設定的密碼,123)即可開始你的深度學習之旅了。
以上就是Jupyter notebook伺服器的配置及遠端訪問的內容了,但是能否正常使用呢,我們下面將通過幾個簡單的例子來對其進行測試。
四、遠端環境的測試
Tensorflow軟體庫的安裝
TensorFlow™ 是一個採用資料流圖(data flow graphs),用於數值計算的開源軟體庫。節點(Nodes)在圖中表示數學操作,圖中的線(edges)則表示在節點間相互聯絡的多維資料陣列,即張量(tensor)。它靈活的架構讓你可以在多種平臺上展開計算,例如臺式計算機中的一個或多個CPU(或GPU),伺服器,移動裝置等等。TensorFlow 最初由Google大腦小組(隸屬於Google機器智慧研究機構)的研究員和工程師們開發出來,用於機器學習和深度神經網路方面的研究,但這個系統的通用性使其也可廣泛用於其他計算領域。
上述操作完成之後,我們需要在Anaconda下安裝Tensorflow包,這裡我們可以採用Anaconda虛擬環境中安裝:
- Anaconda下通過create命令並指令Python版本建立一個虛擬環境
- conda env list可以看見當前所擁有的環境
- activate命令啟用所需要的虛擬環境
- 成功進入後後我們即可直接通過pip進行安裝tensorflow2(本文直接安裝CPU版本,如需安裝GPU版本可看註釋)
# Anaconda下通過`create`命令並指令Python版本建立一個虛擬環境,命名tensorflow2
conda create --name tensorflow2 python=3.6、
# `conda env list`可以看見當前所擁有的環境
conda env list
# `activate`命令啟用所需要的虛擬環境
conda activate tensorflow2
# 成功進入後後我們即可直接通過pip進行安裝`tensorflow2`
pip install -U tensorflow -i https://pypi.tuna.tsinghua.edu.cn/simple --default-timeout=1000
# GPU版本安裝:conda create -n tf2 tensorflow-gpu,執行之後會自動安裝 CUDA,cuDNN,TensorFlow GPU 等
複製程式碼
在虛擬環境安裝好Tensorflow2之後,要想在Jupyter notebook下使用該虛擬環境,我們還需要在該環境下安裝ipkernel:
conda install ipykernel
python -m ipykernel install --name tensorflow2 --display-name tensorflow2
複製程式碼
成功安裝之後,在tensorflow2虛擬環境下使用jupyter notebook命令即可啟動,登入之後在服務頁面中即可指定tensorflow2 kernel環境來編寫程式碼。通過上述的操作,我們已經完成了所有的工作。下面我們對其進行驗證,看看Anaconda下的第三方包能否正常使用。為此,我們通過以下幾個小的案例來進行驗證:
- 百度及其子連結的簡單爬蟲(requests, BeautifulSoup)
- 資料視覺化操作(numpy,matplotlib,skimage)
- 基於神經網路實現fashion_mnist圖片的識別(Tensorflow、Keras)
簡單爬蟲
import requests
from bs4 import BeautifulSoup
def get_page(url, headers=None):
return requests.get(url).text
if __name__ == "__main__":
baidu_url = "https://www.baidu.com"
baidu_soup = BeautifulSoup(get_page(baidu_url), "html.parser")
son_links = [biaoqian_a.attrs["href"] for biaoqian_a in baidu_soup.find_all("a")]
for index, son_link in enumerate(son_links):
print("正在請求第{}個頁面".format(str(index)))
print(get_page(son_link))
複製程式碼
資料視覺化
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib as mpl
% matplotlib inline
for module in np, pd, mpl:
print(module.__name__, module.__version__)
if __name__ == "__main__":
ax =pd.DataFrame(np.random.randn(1000, 6), columns=list('ABCDEF')).cumsum().plot(secondary_y=["D", "E", "F"])
ax.set_ylabel('ABC plot')
ax.right_ax.set_ylabel('DEF scale')
ax.legend(loc='upper left')
ax.right_ax.legend(loc='upper right')
plt.show()
複製程式碼
基於神經網路實現fashion_mnist圖片的識別
import tensorflow as tf
import numpy as np
from matplotlib import pyplot as plt
import matplotlib as mpl
%matplotlib inline
for module in tf, np, mpl:
print(module.__name__, module.__version__)
if __name__ == "__main":
(x_train_all, y_train_all), (x_test, y_test) = tf.keras.datasets.fashion_mnist.load_data()
x_valid, x_train = x_train_all[:50000], x_train_all[50000:]
y_valid, y_train = y_train_all[:50000], y_train_all[50000:]
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Flatten(input_shape = [28, 28])) # 定義輸入層
model.add(tf.keras.layers.Dense(300, activation="relu")) # 定義全連線層(最普通的神經網路),中間定義兩個隱藏層
model.add(tf.keras.layers.Dense(100, activation="relu")) # 再定義一個全連線層
model.add(tf.keras.layers.Dense(10, activation="softmax")) # 定義輸出層
model.compile(loss = "sparse_categorical_crossentropy",
optimizer = "adam",
metrics = ["accuracy"])
history = model.fit(x_train, y_train, epochs=10,
validation_data=(x_valid, y_valid))
pd.DataFrame(history.history).plot(figsize=(8, 5))
plt.grid(True)
plt.gca().set_ylim(0, 1)
plt.show()
複製程式碼
總結
通過上述的演示,已經完成了windows10下使用xshell遠端連線linux系統以及遠端訪問jupyter-notebook服務,並通過幾個小例子來對其進行驗證說明可以正常使用linux下的anaconda。這樣的話即可實現兩臺PC級之間的協調工作,一臺用作服務端提供環境,另外一臺作為客戶端來遠端進行訪問並編寫程式碼,而且其中的優勢也是顯而易見的,既能在一定程度上減小計算機的壓力,又能方便管理且易於操作。另外,以上的環境搭建只作為一個案例,並不唯一,比如你可以使用Linux Centos、aliyun雲伺服器等。如果以上內容幫助到了你,請點個贊吧.゚ヽ(。◕‿◕。)ノ゚.:。+゚