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