MXNet深度學習實戰》—1.1.3 深度學習">《MXNet深度學習實戰》—1.1.3 深度學習
700
2025-04-04
1.1.3????使用Python進行向上擴展
Python是一種解釋性語言,就是說它在運行時將腳本讀入內存,并執行它,從而訪問必要的資源(文件、內存中的對象等)。除解釋性外,使用Python進行數據分析和機器學習時需要考慮的另一個重要方面是Python為單線程。單線程意味著所有Python程序從腳本開始到結束都是按順序執行的,Python不能利用計算機中多線程和處理器提供的額外處理能力(現在大多數計算機都是多核的)。
考慮到這種情況,可通過不同策略實現對Python的使用進行擴展:
編譯Python腳本以實現更高的運行速度。例如,盡管使用PyPy(一種即時編譯器,可從http://pypy.org/下載)很容易,但實際上本書中并沒有這么做,因為需要從頭開始學習使用Python編寫算法。
將Python作為打包語言,從而將Python所執行的操作與第三方庫和程序(部分支持多核處理)組合在一起。本書中會有很多這樣的范例,你可以調用諸如支持向量機庫(LIBSVM)等專業庫或諸如Vowpal Wabbit(VW)、XGBoost或H2O等程序來實現機器學習。
有效使用矢量化技術,即用于矩陣計算的專用庫。這可以通過使用NumPy或pandas來實現,它們都支持GPU計算。GPU猶如多核CPU,每個CPU具有內存和并行處理計算的能力(能計算出有多個微核)。神經網絡中,基于GPU的矢量化技術能極大加快計算速度。然而,GPU自身也有局限性;首先,將數據傳遞到其內存中并將結果返回到CPU時需要執行某些I/O操作,而這需要通過特殊的API進行并行編程,例如,用于由NVIDIA制造的GPU的CUDA(必須安裝相應的驅動程序和應用程序)。
將大問題分解為塊并在內存中逐個解決每個塊(分而治之算法),這需要對內存或磁盤的數據進行分區或子采樣,并管理機器學習問題的近似解決方案,這樣會非常有效。重要的是要注意,分區和子采樣都針對示例和功能(以及兩者兼有)進行操作。如果原始數據保存在磁盤中,I/O約束將成為相關性能的決定因素。
根據將要使用的學習算法,有效利用多處理和多線程。某些算法本身就能夠將其操作拆分成并行操作。在這種情況下,唯一的約束是CPU和內存(因為你要為將要使用的每個并行工作程序復制數據)。有些算法能在相同內存塊上利用多線程,并同時管理更多操作。
Python 機器學習
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。