用於機器學習的Python和HDFS

2021-09-12 17:19:57 字數 2488 閱讀 1603

python平台是matlab或mathematica等封閉源(和昂貴的!)平台的強大替代品。多年來,隨著numpy和scipy(用於一般科學計算)和tensorflow,keras,theano和pytorch等平台的積極開發,今天通過python環境可供所有人使用的功能是驚人的。新增像jupyter膝上型電腦這樣的東西,對於我們大多數人來說,這筆交易是密封的。

就個人而言,我差不多五年前就停止使用matlab。matlab擁有一系列令人難以置信的軟體模組,可用於您可以想象,授予的任何學科,並且python沒有那麼大的模組可用(嗯,至少還沒有)。但是對於我每天都在進行的深度學習工作,python平台已經非常出色。

我今天使用了幾種工具來學習機器。當我從事網路安全工作時,我傾向於使用pip作為我的模組管理器,並使用虛擬env包裝器(使用虛擬env,duh)作為我的環境管理器。對於機器學習,我使用anaconda。我很欣賞anaconda,因為它在單一工具中提供模組管理和環境管理。我也會將它用於網路安全工作,但它以科學計算為重點,我使用的許多面向系統的模組都不能通過anaconda獲得,需要通過pip安裝。

我還安裝了numpy,scikit-learn,jupyter,ipython和ipdb。我將這些基本功能用於機器學習專案。我通常會安裝一些tensorflow,keras或pytorch的組合,這取決於我正在做什麼。我也使用tmux和powerline,但這些不是python模組(好吧,powerline是,通過powerline-status)。但它們很漂亮,我真的很喜歡它們與ipython的整合方式。最後,我安裝了h5py。

h5py是我今天想和你談談的。相當多的人不熟悉它,也不熟悉底層資料儲存格式hdf5。他們應該是。

hdf5(分層資料格式5)是最初設計用於大型地理空間資料集的資料儲存系統。它是從hdf4發展而來的,hdf4是hdf集團建立的另一種儲存格式。它解決了使用pickle檔案儲存大型資料集的一些顯著缺點 - 它不僅有助於控制儲存資料集的大小,還消除了負載滯後,並且具有更小的記憶體占用。

儲存大小

hdf5通過h5py為您提供與numpy和scipy等儲存資料型別相同的靈活性。這為您提供了在指定張量元素大小時非常具體的功能。當您擁有數百萬個單獨的資料元素時,使用16位或32位資料寬度之間存在相當大的差異。

您還可以在建立和儲存資料集時指定壓縮演算法和選項,包括lzf,lzo,gzip和szip。您也可以指定壓縮演算法的攻擊性。這是乙個很大的問題 - 使用稀疏資料集,壓縮這些資料集中的元素的能力可以節省大量空間。我通常使用具有最高壓縮級別的gzip,並且您可以節省多少空間。在我最近建立的乙個影象資料集上,由於我使用的模型,我被迫使用int64來儲存二進位制值。壓縮允許我消除這些二進位制值上幾乎所有空的開銷,將存檔從先前的int8實現中縮小40%(使用欄位的整個寬度將二進位制值儲存為ascii)。

負載滯後

需要將pickle檔案完全載入到要使用的程序位址空間中。它們是序列化的記憶體駐留物件,要訪問它們需要是記憶體居民,對吧?hdf5檔案只是不關心。

hdf5是一組分層的資料物件(大震,對,因為層次結構是名稱中的第乙個單詞?)。因此,它更像是檔案系統而不是單個檔案。這個很重要。

因為它更像是檔案系統而不是單個資料檔案,所以您不需要一次載入檔案的所有內容。hdf5和h5py將乙個小驅動程式載入到記憶體中,該驅動程式負責從hdf5資料檔案訪問資料。這樣,您只需載入您需要的內容。如果您曾嘗試載入大型pickle檔案,那麼您知道這是多麼重要。您不僅可以快速載入資料,還可以通過舒適的pythonic資料訪問介面(如索引,切片和列表推導)快速訪問資料。

資料足跡

無需在每次需要使用時載入所有資料,也可以在執行時記憶體中提供更小的資料占用空間。當您使用高解析度真彩色影象訓練深度網路時,您的畫素深度大約為32位,那麼您使用的是大量記憶體。您需要釋放盡可能多的記憶體來訓練您的模型,這樣您就可以在幾天而不是幾周內完成。為了儲存資料而留出太位元組(或千兆位元組)的記憶體只是浪費資源,使用你不需要的hdf5。

hdf5本質上是乙個鍵/值儲存,儲存為樹。您可以訪問資料集或組。資料集也是資料集。組是資料集的集合,您可以通過鍵訪問它們。資料集是儲存圖中的葉元素,組是內部節點。組可以容納其他組或資料集; 資料集只能包含資料。組和資料集都可以具有與之關聯的任意元資料(再次儲存為鍵值對)。在hdf5中,此元資料稱為屬性。訪問資料集非常簡單:

將 h5py 匯入為 h5

用 h5。檔案('filename.h5','r')為 f:

group = f [ 'images' ]

dataset = group [ 'my dataset' ]

#繼續,使用資料集!我賭你!

圖1:啟用hdf5,python風格。

h5py是hdf5檔案的python介面,易於使用。它支援現代 with 語義以及傳統 open/close 語義。使用屬性,您不必依賴命名約定來提供儲存資料集的元資料(如影象解析度,起源或建立時間)。您將該資料作為屬性儲存在物件本身上。

python現在經常用於資料分析,包括統計資料分析和機器學習。我們中的許多人也使用本機序列化格式來處理資料。雖然pickle檔案易於使用,但在處理大量資料時它們會陷入困境。hdf5是乙個專為巨大的地理空間資料集而設計的資料儲存系統,可以完美地拾取pickle檔案。

用於機器學習的Python和HDFS

python平台是matlab或mathematica等封閉源 和昂貴的!平台的強大替代品。多年來,隨著numpy和scipy 用於一般科學計算 和tensorflow,keras,theano和pytorch等平台的積極開發,今天通過python環境可供所有人使用的功能是驚人的。新增像jupyte...

Python用於機器學習

機器學習可實現一些演算法,能自動檢測給定輸入中的模式。比如,您給機器學習的演算法提供1000張狗的 和1000張桌子的 那麼,它將會學習區別狗和桌子。當您給出一張狗或桌子的新時,它將能夠識別出是狗還是桌子。我認為,這和嬰兒學習新事物有點類似。嬰兒是如何知道一樣東西看起來像狗,而另一樣東西看起來像桌子...

python機器 python機器學習

熱詞系列 打卡 mark一下,以後看 每天打卡學習 1 python 基礎 bv1lt4y1u7un 2 python 高階 bv1jz411b7dh 3 python 資料庫 bv1pg4y1a7a7 4 python gui與坦克大戰 bv1je411f72o 5 python numpy bv...