如果妳對深度學習和卷積神經網絡感興趣,但不知道從哪裏開始或使用什麽樣的庫,那麽這裏對妳有很大的幫助。
在本文中,我詳細解釋了我最喜歡的9個Python深度學習庫。
這個列表並不詳盡,它只是我在計算機視覺職業生涯中使用過的並且在某個時候發現特別有用的庫的列表。
我使用其中壹些庫比其他庫多得多,尤其是Keras、mxnet和sklearn-theano。
其他的我都是間接使用,比如Theano和TensorFlow(庫有Keras,deepy和Blocks等。).
其他的我只在壹些特殊任務中用過(比如nolearn和他們的Deep Believe網絡實現)。
本文的目的是向您介紹這些庫。我建議妳仔細了解這裏的每壹個庫,然後在具體的工作情況下妳才能確定最適合的庫。
我想重申,這份清單並不詳盡。另外,由於我是壹名計算機視覺研究人員,長期活躍在這壹領域,我會更加關註卷積神經網絡(細胞神經網絡)的庫。
我把這個深度學習庫列表分為三個部分。
第壹部分是大眾圖書館,妳可能已經很熟悉了。我提供了這些庫的通俗和高水平的概述。然後,我針對每個庫詳細解釋了自己的好惡,並列舉了壹些合適的應用案例。
第二部分進入我個人最喜歡的深度學習庫,也是我日常工作中使用最多的,包括Keras、mxnet、sklearn-theano。
最後,我為第壹部分中不經常使用的庫做了壹個“福利”部分,第二部分中妳可能還會發現我沒有嘗試過的有用或有趣的庫。
讓我們繼續探索。
對於初學者:
咖啡
說到“深度學習庫”,不可能不提到Caffe。事實上,既然妳打開這個頁面學習深度學習庫,我相信妳壹定聽說過Caffe。
那麽,到底什麽是咖啡?
Caffe是由Berkeley視覺和學習中心(BVLC)建立的深度學習框架。它是模塊化的,速度極快。而且還應用於學術界和工業界的最新應用。
事實上,如果妳翻閱最新的深度學習出版物(其中也提供了源代碼),妳很可能會在它們相關的GitHub庫中找到Caffe模型。
雖然Caffe本身不是Python庫,但是它提供了壹種與Python綁定的編程語言。我們通常在新領域開發網絡時使用這些綁定。
我之所以把Caffe放在這個列表裏,是因為它幾乎被用在了每個方面。您可以在壹個空白文檔中定義您的模型架構和解決方案,並創建壹個JSON文件類型的. prototxt配置文件。Caffe二進制文件提取這些。prototxt文件和訓練妳的網絡。在Caffe完成訓練後,妳可以通過Caffe二進制文件發送妳的網絡和分類的新圖像,甚至更好,直接通過Python或MATLAB API。
雖然我很喜歡Caffe的性能(每天可以在K40 GPU上處理60萬張圖片),但是我更喜歡Keras和mxnet。
主要原因是在壹個. prototxt文件中構建壹個模式可能會變得非常無聊和乏味。更重要的是,Caffe不能通過編程來調整超參數!因為這兩個原因,在基於Python的API中,我傾向於允許我實現端到端同播網絡(包括交叉驗證和調整超參數)的庫。
Theano
壹開始我想說Theano很美。如果沒有Theano,我們永遠不會達到現有深度學習庫的數量(尤其是Python)。同樣,如果沒有numpy,我們也不會有SciPy、scikit-learn和scikit-image,這也可以說是關於ano和深度學習的更高層次的抽象。
核心上,Theano是壹個Python庫,用於定義、優化和評估涉及多維數組的數學表達式。Theano通過與numpy的緊密集成,透明地使用GPU來完成這些任務。
雖然Theano可以用來構建深度學習網絡,但我傾向於認為Theano是神經網絡的基石,同樣numpy是科學計算的基石。事實上,我在文章中提到的大多數庫都在Theano周圍,這讓我更加方便。
不要誤解我,我喜歡Theano,我只是不喜歡用Theano寫代碼。
在Theano中構建卷積神經網絡就像用Python中的numpy編寫壹個定制的支持向量機(SVM)。當然,這種對比並不完美。
妳能做到嗎?
當然了。
值得妳花費時間和精力嗎?
嗯,也許吧。這要看妳是想擺脫低級,還是妳的應用需要。
我個人更喜歡用Keras這樣的庫,它把Theano打包成更人性化的API。同樣的,scikit-learn讓機器學習算法的工作變得更加容易。
張量流
與Theano類似,TensorFlow是壹個使用數據流圖進行數值計算的開源庫(這是所有神經網絡的固有特性)。該庫最初由谷歌機器智能研究所的谷歌大腦團隊研究人員開發,此後壹直開源並向公眾提供。
與Theano相比,TensorFlow的主要優勢是分布式計算,尤其是在多GPU環境下(雖然這是Theano正在攻克的項目)。
除了把Keras後端換成TensorFlow而不是Theano,我對TensorFlow庫沒有太多經驗。然而,在接下來的幾個月裏,我希望這種情況會有所改變。
千層面
Lasagne是壹個輕量級的庫,用於在Theano中構建和訓練網絡。這裏的關鍵字是輕量級的,這意味著它不是像Keras那樣圍繞著Theano重新打包的庫。雖然這將使您的代碼更加復雜,但它將使您從各種限制中解放出來,並允許您根據模板進行模塊化構建。
簡而言之:Lasagne的功能是Theano的低級編程和Keras的高級抽象的折中。
我的最愛:
克拉斯
如果我必須選擇壹個喜歡的深度學習Python庫,我將很難在Keras和mxnet之間做出選擇——但最終,我想我會選擇Keras。
說真的,我不能告訴妳所有關於Keras的好處。
Keras是壹個極小的模塊化神經網絡庫,可以使用Theano或TensorFlow作為後端。Keras的主要用戶體驗是,從構思到產生結果將是壹個非常快速的過程。
在Keras中構建網絡設計是非常容易和自然的。它包括壹些最先進的優化算法(Adam,RMSProp),批處理範式和激活層(PReLU,eLU,LeakyReLU)。
Keras也非常重視卷積神經網絡,這是我非常需要的。不管是不是有意為之,我覺得從計算機視覺的角度來說,都是非常有價值的。
更重要的是,妳可以很容易地建立壹個基於序列的網絡(其中輸入線性地流經網絡)和壹個基於圖的網絡(其中輸入可以“跳過”壹些層,直接與後面連接)。這使得創建像GoogLeNet和SqueezeNet這樣的復雜網絡結構變得更加容易。
我認為Keras的唯壹問題是它不支持在多GPU環境中並行訓練網絡。這可能是也可能不是妳的禁忌。
如果我想盡快訓練網絡,那麽我可能會使用mxnet。但是如果我需要調整超參數,我會使用Keras設置四個獨立的實驗(分別在我的Titan X GPUs上運行)並評估結果。
mxnet
我第二喜歡的深度學習的Python庫無疑是mxnet(重點是訓練圖像分類網絡)。雖然在mxnet中建立壹個網絡可能需要更多的代碼,但它將為您提供數量驚人的語言綁定(C ++、Python、R、JavaScript等。).
Mxnet庫真正突出的是分布式計算,支持在多臺CPU/GPU機器上訓練妳的網絡,甚至可以在AWS、Azure、YARN中集群。
它確實需要更多的代碼來建立壹個實驗並在mxnet上運行它(與Keras相比),但如果妳需要在多個GPU或系統上分布訓練,我推薦mxnet。
sklearn-theano
有時候妳不需要端到端的訓練來建立壹個卷積神經網絡。相反,妳需要把CNN當成壹個特征提取器。當妳沒有足夠的數據從零開始培養壹個完整的CNN時,它變得特別有用。只需要把妳的輸入圖像放到壹個流行的預訓練框架中,比如OverFeat,AlexNet,VGGNet或者GoogLeNet,然後從FC層(或者妳想用的任何層)提取特征。
總之,這就是sklearn-theano的功能。妳不能用它從頭到尾訓練壹個模型,但它的神奇之處在於妳可以用網絡作為特征提取器。當我需要評估某個具體問題是否適合深度學習解決時,我傾向於用這個庫作為我的第壹手判斷。
諾勒恩
我在PyImageSearch博客上用過幾次nolearn,主要是在我的MacBook Pro上做壹些初步的GPU實驗,在亞馬遜EC2 GPU實例上做深度學習。
Keras將Theano和TensorFlow打包成更人性化的API,nolearn對千層面也是如此。另外,nolearn中的所有代碼都兼容scikit-learn,對我來說絕對是壹個超級福利。
我個人不使用CNN的nolearn,但是妳當然可以用(CNN我更喜歡用Keras和mxnet)。我主要用nolearn做深度信念網絡(dbn)。
數字
DIGITS不是真正的深度學習庫(雖然是用Python寫的)。DIGITS(深度學習GPU訓練系統)其實是壹個用來訓練Caffe的深度學習模式的web應用(雖然我覺得妳可以破解源代碼,用Caffe之外的其他後端來工作,聽起來像個噩夢)。
如果妳用過Caffe,妳就會知道定義起來相當繁瑣。prototxt文件,生成圖像數據,運行網絡,通過它的終端監督妳的網絡訓練。DIGITS旨在通過讓您在瀏覽器中執行這些任務來解決這個問題。
另外DIGITS的用戶界面非常優秀,可以為妳提供有價值的統計數據和圖表作為妳的模型訓練。此外,您可以通過各種輸入輕松地可視化網絡中的激活層。最後,如果您想要測試特定的圖像,您可以將圖像上傳到您的DIGITS服務器或輸入圖像的URL,然後您的Caffe模型將自動對圖像進行分類並在瀏覽器中顯示結果。幹凈整潔!
阻礙
說實話,雖然我壹直想嘗試,但是到目前為止我還沒有用過Blocks(這也是我把它列入這個列表的原因)。像這個列表中的許多其他庫壹樣,Blocks構建於Theano之上,提供了壹個用戶友好的API。
迪皮
如果讓妳猜deepy是圍繞哪個庫建立的,妳會猜是什麽?
沒錯,就是Theano。
記得前段時間用過deepy,大概6-8個月沒碰了。我打算在下壹篇博文中再試壹次。
pylearn2
雖然我從來沒有主動用過pylearn2,但是由於歷史原因,我覺得有必要把它列入這個列表。Pylearn2不僅是壹個通用的機器學習庫(類似於scikit-learn),還包括深度學習算法的實現。
我對pylearn2最大的擔心是它沒有壹個活躍的開發者(在我寫這篇文章的時候)。正因為如此,與像Keras和mxnet這樣積極維護的庫相比,我仍然猶豫是否推薦pylearn2。
深度學習4j
這應該是壹個基於Python的列表,但我想我會在這裏包括Deeplearning4j,主要是出於對他們所做的事情的極大尊重——Deep Learning 4J為JVM構建了壹個開源的分布式深度學習庫。
如果您在企業工作,您可能有壹個裝滿二手Hadoop和MapReduce服務器的存儲。也許妳還在用這些,也許妳早就不用了。
妳如何將這些相同的服務器應用於深度學習?
原來妳可以——妳只需要Deeplearning4j。
相當於
以上就是本文介紹的關於13最常用的Python深度學習庫。