在Windows平台上搭建基於Keras的Python神經網路環境

原則上,你應該使用Ubuntu來做這件事情。不過學習和維護Linux有一定的門檻,如果想臨時迴避這個門檻,可以參考本篇文章的做法。

==================================================================================================================================================================================================================

學習和使用深度學習,特別是基於神經網路的深度學習,通常而言首先需要一個框架。(當然,老司機們不需要框架,直接用編程語言自帶的功能也可以擼一個神經網路出來)。框架的好處是在於屏蔽了各種計算的細節,特別是GPU加速的繁雜操作,而能夠讓使用者關注神經網路本身的訓練和測試當中。

不同的框架,其『底層』的程度也是不一樣的。諸如Google開發的TensorFlow(由於眾所周知的原因,中國大陸地區無法訪問),微軟開發的CNTK,加拿大蒙特利爾大學開發的Theano,以及伯克利大學開發的caffe等,它們並不依賴其他平台,故屬於最『底層』的框架。而本文推薦的keras,本質上是TensorFlow/CNTK/Theano的一層包裝,其抽象程度更高,界面更加友好,易於上手。

本文就介紹從零開始搭建一個keras環境。以運行效率起見,選擇TensorFlow作為它的後端。

1.準備工作

首先確認你的Windows是64位的Windows 7/8/10,其他版本的Windows不建議使用。

下載以下文件。為了將來便於復現環境,可以保存在一個固定的位置。

首先是Python。我們選擇64位的Python3,由於Python 3.6的兼容性問題,我們選擇3.5.x

Python 3.5 x64 python.org/ftp/python/3

TensorFlow依賴於多個Python第三方庫,其中的Numpy和Scipy無法方便地從Python官方源中正常獲得(你需要安裝和配置C編譯器),這裡我們選擇別人做好的預編譯版本

Numpy Prebuild numpy-1.13.1+mkl-cp35-cp35m-win_amd64.whl

Scipy Prebuild scipy-0.19.1-cp35-cp35m-win_amd64.whl

注意需要選擇帶有「cp35?cp35m?win_amd64.whl」後綴的文件

2.安裝環境

下面安裝Python環境以及必要的庫。雙擊運行下載到的Python安裝程序。對Windows環境變數不熟悉的同學,一定要先勾選最下方的『Add Python 3.5 to PATH』,再單擊Install Now

安裝好之後,按shift的同時右擊保存有numpy、scipy安裝包的文件夾,選擇『在此處打開命令窗口』

在彈出的命令行窗口中依次運行以下兩個命令,順序不可顛倒。文件名可以通過Tab補全

pip3 install "numpy-1.13.1+mkl-cp35-cp35m-win_amd64.whl"npip3 install "scipy-0.19.1-cp35-cp35m-win_amd64.whl"n

安裝的過程如下:

隨後輸入以下命令安裝tensorflow。在以後的命令里,相應的安裝文件會自動下載

pip3 install tensorflown

如果安裝過程中沒有問題(提示Sucessfully installed...),則安裝keras

pip3 install kerasn

安裝h5py和pillow,以讀取相應格式的文件

pip3 install h5pynpip3 install pillown

3. 下載權重

安裝好keras就可以進行神經網路的設計和訓練了,但在本文中我們跳過這個步驟,即假設已經設計好了神經網路的結構,並得到了權重。

keras 內建了許多學術界已經發表的神經網路結構。我們使用2017年6月Google發表的mobilenet作為學習對象。第一次使用mobilenet的時候,keras 會自動下載這個網路的權重,但由於使用Python自身的下載功能,速度較慢。所以比較好的解決方法是使用迅雷等工具下載權重。

在keras作者的github可以得到mobilenet的權重。打開fchollet/deep-learning-models,選擇mobilenet_1_0_224_tf.h5進行下載。把得到的文件放在 C:Users<你的用戶名>.kerasmodels裡面。如果這個目錄不存在,就自己創建一個。按Win+R,輸入cmd並回車(此時cmd所在的目錄就是C:Users<你的用戶名>),然後

mkdir .keras

cd .keras

mkdir models

權重準備好之後就可以使用mobilenet進行圖像識別了。代碼非常簡單:

from keras.applications.mobilenet import MobileNetnfrom keras.preprocessing import imagenfrom keras.applications.mobilenet import preprocess_input, decode_predictionsnimport numpy as npnimport sysnnmodel = MobileNet(weights=imagenet)nnimg_path = sys.argv[1]nimg = image.load_img(img_path, target_size=(224, 224))nx = image.img_to_array(img)nx = np.expand_dims(x, axis=0)nx = preprocess_input(x)nnpreds = model.predict(x)nprint(Predicted:, decode_predictions(preds, top=3)[0])n

首先創建一個mobilenet對象,它代表了神經網路的結構,並自動的從你剛才下載權重的位置讀取權重。然後讀入一張圖片,轉換為神經網路的輸入格式(4-D Tensor,-1~1之間的浮點數),然後用神經網路對這個輸入數據進行計算,計算結果是一個1000維的向量,通過查表得到這個向量代表何種物體。

筆者的一次運行結果是這樣的:

即,這個神經網路認為該圖片有63.8%的概率為斑紋貓,24.9%的概率為埃及貓,9.5的概率為虎貓。


推薦閱讀:

深度學習系列3 - CNNs 以及應對過擬合的詳細探討
從梯度下降到擬牛頓法:盤點訓練神經網路的五大學習演算法
Python寫簡單的線性分類器

TAG:Python | 神经网络 | 深度学习DeepLearning |