每年的十二月是每個人review過去一年成就的時候,在看自己成就的同時,也同時為未來做好打算。對于程序員來說,十二月通常是回顧今年發(fā)布的開源庫或者是最近流行的開源庫,因為它們是在未來一段時間內(nèi)解決我們問題的絕佳工具。
AI的快速發(fā)展,讓機器學習走向了巔峰,今天我們就借此盤點一下2017年最受歡迎的機器學習庫(ML),希望你能夠在這里尋找到你未來一段時間內(nèi)的“利器”。
1. Pipenv
Pipenv是今年初開源的用于管理依賴項的官方推薦工具。Pipenv最初是由Kenneth Reitz創(chuàng)立的一個項目,旨在將其他包管理器(如NPM或yarn)的創(chuàng)意整合至Python中。安裝virtualenv和virtualenvwrapper,并確保依賴項的依賴項版本的可重復性(在這里閱讀更多關于這方面的信息)。使用Pipenv,你可以指定所有的依賴關系,通常使用命令添加,刪除或更新依賴項。該工具可以生成一個文件,使得你的構建是確定性的,它可以幫助你避免那些難以捉住的BUG。
2. PyTorch
今年Facebook推出的DLT框架PyTorch,在深度學習社區(qū)中很受歡迎。PyTorch是構建在流行的Torch框架之上,尤其是它是基于Python的?紤]到過去幾年人們一直在使用Python進行數(shù)據(jù)科學研究,這也是深度學習庫大部分是使用Python的原因。
最值得注意的是,PyTorch已經(jīng)成為了眾多研究人員的首選框架之一,因為它實現(xiàn)了新穎的動態(tài)計算圖范例(Dynamic Computational Graph paradigm)。當使用TensorFlow,CNTK或MXNet等框架編寫代碼時,必須首先定義一個稱為計算圖的東西。該圖指定了我們的代碼將運行的所有操作,這些操作稍后會被編譯并被框架優(yōu)化,以便能夠在GPU上并行運行得更快。這個范例被稱為靜態(tài)計算圖,因為你可以利用各種優(yōu)化,而且這個圖形一旦建成,就可以運行在不同的設備上。然而,在諸如自然語言處理之類的任務中,工作量通常是可變的。在將圖像提供給算法之前,把圖像調(diào)整為固定的分辨率,但不能對可變長度的句子進行相同的處理。這恰恰能體現(xiàn)PyTorch和動態(tài)圖表的優(yōu)勢,通過讓你在代碼中使用標準的Python控制指令,圖形將在執(zhí)行時定義,給你更多自由空間,這對于幾個任務來說是必不可少的。
當然,PyTorch也會自動計算梯度,并且速度非?,而且是可擴展的。
3. Caffe2
這聽起來可能不太現(xiàn)實,F(xiàn)acebook今年也發(fā)布了另一個的DL框架——caffe2。原來的Caffe框架已被廣泛使用多年,并以非常不錯的性能和經(jīng)過測試的代碼庫而聞名。然而,最近DL的趨勢使這個框架在某些方面顯得有些out。于是Caffe2就成為了它的替代品。
Caffe2支持分布式訓練、部署,支持最新的CPU和CUDA的硬件。雖然PyTorch可能更適合研究,但Caffe2更適合大規(guī)模部署。其實,你可以在PyTorch中構建和訓練模型,同時使用Caffe2進行部署!這不是很好嗎?
4. Pendulum
去年,Arrow是一個旨在使你更輕松,同時使用Python date time類進入了榜單,而今年是Pendulum。
Pendulum的優(yōu)點之一是它是Python標準datetime類直接替代品,因此你可以輕松地將其與現(xiàn)有代碼集成,并且只有在需要時才能使用其功能。作者特別注意確保時區(qū)能夠正確處理,默認情況下使每個實例時區(qū)感知自己的時區(qū)。你也將得到一個擴展timedelta,這樣日期時間算術更容易。
與其他的庫不同,它努力使API具有可預測的行為。如果你正在做一些涉及日期的小事,請查看更多的文檔。
5. Dash
如果你正在做數(shù)據(jù)科學,你可能會使用Python生態(tài)系統(tǒng)中的Pandas和scikit-learn等優(yōu)秀的工具。還可以使用JupyterNotebook管理你的工作流程。但是,當你和那些不知道如何使用這些工具的人一起做一項工作的時候,你該怎么辦?你如何建立一個界面,使人們可以輕松地玩轉數(shù)據(jù),并在整個過程中對其進行可視化?過去,你或許需要一個專業(yè)的JavaScript前端團隊來構建這些GUI。
Dash近幾年發(fā)布的一個用于構建Web應用程序的開源庫,尤其是在純Python語言中利用數(shù)據(jù)可視化的Web應用程序。它建立在Flask,Plotly.js和React 之上,并提供了接口,所以你不必學習這些框架也能進行高效的開發(fā)。如果你想了解更多關于Dash的有趣應用,點擊這個地方。
6. PyFlux
Python中有許多庫用于研究數(shù)據(jù)科學和ML,但是當你的數(shù)據(jù)是隨著時間的推移而變化的度量(例如股票價格,儀器的測量值等等)時,這對于大部分庫來說是一個比較棘手的問題。
PyFlux是一個專門為時間序列而開發(fā)的 Python開源庫。時間序列研究是統(tǒng)計學和計量經(jīng)濟學的一個子領域,目標可以描述時間序列如何表現(xiàn)(以潛在的因素或興趣的特征來表示),也可以借此預測未來的行為。
PyFlux允許使用時間序列建模,并且已經(jīng)實現(xiàn)了像GARCH這樣的現(xiàn)代時間序列模型。
7. Fire
通常情況下,你需要為你的項目制作命令行界面(CLI)。除了傳統(tǒng)的argparse,Python還有一些這樣的工具,Clik和docopt。Fire是今年谷歌發(fā)布的軟件庫,在解決這個的問題上采用了不同的方法。
Fire是一個開源的庫,可以為任何Python項目自動生成一個CLI,關鍵是自動,你幾乎不需要編寫任何代碼或文檔來構建你的CLI!你只需要調(diào)用一個Fire方法并把它所需要構建的傳遞給CLI。
如果你想對此有所深入了解,請閱讀指南,因為這個庫可以為你節(jié)省很多時間。
8. Imbalanced-learn
在理想的情況下,我們會有完美平衡的數(shù)據(jù)集,但不幸的是,現(xiàn)實世界并不是這樣的,某些任務擁有非常不平衡的數(shù)據(jù)。例如,在預測信用卡交易中的欺詐行為時,你預計絕大多數(shù)交易(99.9%)是合法的。天真地訓練ML算法會導致令人失望的性能,所以在處理這些類型的數(shù)據(jù)集時需要特別小心。
幸運的是,Imbalanced-learn是一個Python包,它提供了一些解決這類問題的方法,并提供一些技術的實現(xiàn),它與scikit-learn兼容,是scikit-learn-contrib項目的一部分。
9. FlashText
如果你需要搜索某些文本并將其替換為其他內(nèi)容(如大多數(shù)數(shù)據(jù)清理流程中),則通常會轉為正則表達式。通常情況下,正則表達式考研完美的解決問題。但是有時會發(fā)生這樣的情況:你需要搜索的術語數(shù)量是成千上萬,然后,正則表達式可能變得非常緩慢。這時FlashText是一個更好的選擇,它使整個操作的運行時間大大提高了(從5天到15分鐘)。FlashText的優(yōu)點在于無論搜索條件有多少,運行時都是一樣的,而正則表達式中運行時將隨著條件數(shù)幾乎呈線性增長。
FlashText證明了算法和數(shù)據(jù)結構設計的重要性,即使對于簡單的問題,更好的算法也可以輕松超越最快的CPU。
10. Luminoth
現(xiàn)實生活中圖像無處不在,理解其內(nèi)容對于多個應用程序來說是至關重要的。值得慶幸的是,由于DL的發(fā)展,圖像處理技術已經(jīng)進步很多。
Luminoth是一個使用TensorFlow和Sonnet構建的用于計算機視覺的開源Python工具包。目前,它可以支持被稱為Faster R-CNN的模型的形式進行對象檢測。
并且Luminoth不僅是一個特定模型的實現(xiàn),而是建立在模塊化和可擴展的基礎上的,所以定制現(xiàn)有的部分或用新的模型來擴展它來處理不同的問題,就可以能多地重用代碼。它提供了用于輕松完成構建DL模型所需的工程工作如:將你的數(shù)據(jù)轉換為用于提供數(shù)據(jù)管道(TensorFlow的記錄)的格式,執(zhí)行數(shù)據(jù)增強,在多個GPU訓練,運行評估指標,在TensorBoard中可視化,并用簡單的API或瀏覽器界面部署訓練有素的模型,以便人們使用。
其他優(yōu)秀的Python庫:
1.PyVips
你可能從來沒有聽說過libvips庫,首先它是一個圖像處理庫,如Pillow或ImageMagick,并支持多種格式。但是,與其他庫相比,libvips速度更快,占用的內(nèi)存也更少。PyVips是最近發(fā)布的用于libvips的Python綁定包,它與Python 2.7-3.6(甚至PyPy)兼容,易于使用pip。如果在你的應用程序中需要進行某種形式的圖像處理,可以考慮一下它。
2.Requestium
有時,你需要自動化網(wǎng)絡中的某些操作,如抓取網(wǎng)站,進行應用程序測試,填寫網(wǎng)頁表單,要想在不暴露API的網(wǎng)站中執(zhí)行操作,自動化是必需的。Python有很好的請求庫,可以讓你執(zhí)行一些這樣的操作,但不幸的是請求獲取的HTML代碼可能沒有表單,你可能會嘗試查找表單來填充自動化任務。解決這個問題的方法是對JavaScript代碼所做的請求進行反向工程,這將意味著需要花費很多時間來調(diào)試。另一個選擇是轉向使用Selenium這樣的庫,它允許你以編程方式與Web瀏覽器交互并運行Javascript代碼。有了這個,問題就可以解決了。
Requestium庫可以讓你從請求開始并無縫地切換到使用Selenium,它可以作為一個請求的直接替換。它還集成了Parsel,因此編寫所有用于在頁面中查找元素的選擇器要比其它方式更加快捷。
3.skorch
假如你很喜歡使用scikit-learn的API,但是遇到了需要使用PyTorch來完成工作。不要擔心,skorch是一個封裝,可以通過類似sklearn的接口提供PyTorch編程。如果你熟悉這些庫,那么語法將很簡單易懂。通過skorch,你會得到一些抽象的代碼,所以你可以把更多的精力放在真正重要的事情上,比如做數(shù)據(jù)科學。
來源:網(wǎng)絡整理 免責聲明:本文僅限學習分享,如產(chǎn)生版權問題,請聯(lián)系我們及時刪除。