深度介入編譯器
『壹』 人工智慧 python深度學習庫有哪些
由於Python的易用性和可擴展性,眾多深度學習框架提供了Python介面,其中較為流行的深度學習庫如下:
第一:Caffe
Caffe是一個以表達式、速度和模塊化為核心的深度學習框架,具備清晰、可讀性高和快速的特性,在視頻、圖像處理方面應用較多。
Caffe中的網路結構與優化都以配置文件形式定義,容易上手,無須通過代碼構建網路;網路訓練速度快,能夠訓練大型數據集與State-of-the-art的模型,模塊化的組件可以方便地拓展到新的模型與學習任務上。
第二:Theano
Theano誕生於2008年,是一個高性能的符號計算及深度學習庫,被認為是深度學習庫的始祖之一,也被認為是深度學習研究和應用的重要標准之一。其核心是一個數學表達式的編譯器,專門為處理大規模神經網路訓練的計算而設計。
Theano很好地整合了Numpy,可以直接使用Numpy的Ndarray,使得API介面學習成本大為降低;其計算穩定性好,可以精準地計算輸出值很小的函數;可動態地生成C或者CUDA代碼,用來編譯成高效的機器代碼。
第三:TensorFlow
TensorFlow是相對高階的機器學習庫,其核心代碼使用C++編寫,並支持自動求導,使得用戶可以方便地設計神經網路結構,不需要親自編寫C++或CUDA代碼,也無須通過反向傳播求解梯度。由於底層使用C++語言編寫,運行效率得到了保證,並簡化線上部署的復雜度。
TensorFlow不只局限於神經網路,其數據流式圖還支持非常自由的演算法表達,也可以輕松實現深度學習以外的機器學習演算法。
第四:Keras
Keras是一個高度模塊化的神經網路庫,使用Python實現,並可以同時運行在TensorFlow和Theano上。
Keras專精於深度學習,其提供了到目前為止最方便的API,用戶僅需將高級的模塊拼在一起便可設計神經網路,大大降低了編程開銷與理解開銷。
『貳』 為什麼需要改變編譯器
答案如下:
1.編譯器是把源程序的每一條語句都編譯成機器語言,並保存成二進制文件,這樣運行時計算機可以直接以機器語言來運行此程序,速度很快;
2.解釋器則是只在執行程序時,才一條一條的解釋成機器語言給計算機來執行,所以運行速度是不如編譯後的程序運行的快的.
3.因為計算機不能直接認識並執行我們寫的語句,它只能認識機器語言(是二進制的形式).
4.編譯是將源程序翻譯成可執行的目標代碼,翻譯與執行是分開的;而解釋是對源程序的翻譯與執行一次性完成,不生成可存儲的目標代碼。這只是表象,二者背後的最大區別是:對解釋執行而言,程序運行時的控制權在解釋器而不在用戶程序;對編譯執行而言,運行時的控制權在用戶程序。
4.編譯器在優化過程中採用了自動或半自動的代碼生成用以替代人工優化。人的精力是有限的,通過(接近無限)的算力去適配每一個應用場景看到的網路,改變編譯器,這是編譯技術比人工路線強的所在。
『叄』 在電腦上用易語言編程用什麼軟體最好
c語言編程軟體有哪些。
Mcrosoft Visual C++ 、Microsoft Visual Studio、 DEV C++、Code::Blocks、Borland C++、WaTCom C++、Borland C++ Builder、GNU DJGPP C++、Lccwin32 C Compiler3.1、High C、Turb C、gcc、C-Free和Win-TC、My Tc等等,由於C語言比較成熟,所以編程環境很多。
2.C語言入門,不推薦使用VC,因為VC不但龐大,而且應用開發比較高級。入門編程薦使用Dev-C 和 WIN-TC。
1)WIN-TC,該軟體使用TC2為內核,提供WINDOWS平台的開發界面,因此也就支持WINDOWS平台下的功能,例如剪切、復制、粘貼和查找替換等。而且在功能上也有它的獨特特色例如語法加亮、C內嵌匯編、自定義擴展庫的支持等。並提供一組相關輔助工具令你在編程過程中更加游刃有餘。
2)Dev-C ,Dev-C 是一個Windows下的C和C 程序的集成開發環境。它使用MingW32/GCC編譯器,遵循C/C 標准。開發環境包括多頁面窗口、工程編輯器以及調試器等,在工程編輯器中集合了編輯器、編譯器、連接程序和執行程序,提供高亮度語法顯示的,以減少編輯錯誤,還有完善的調試功能,能夠適合初學者與編程高手的不同需求,是學習C或C的首選開發工具。
『肆』 計算機程序設計語言分為四類
計算機程序設計語言分為四類
為了讓計算機解決實際問題,人們從一開始就不斷地開展程序設計工作,這里的「程序」就是計算機能夠執行的指令代碼(機器碼和其它代碼)。程序設計人員還必須在一個被稱為「計算機程序設計語言(也可以稱為編譯或解釋性語言)」的環境中開展編程。
計算機程序設計語言
是指程序設計人員和計算機都可以識別的程序代碼(包括0和1機器代碼)規則,是人與計算機進行交流的工具,可以把程序設計語言分為以下四類。
1.機器語言
機器語言是一種CPU指令系統, 被稱為CPU的機器語言, 它是CPU可以識別的一組由0和1序列構成的指令碼。用機器語言編程序, 就是從所使用的CPU的指令系統中挑選合適的指令,組成一個指令序列。這種程序可以被機器直接理解並執行,速度很快,但由於不直觀、難記、難以理解、不易查錯、開發周期長,很難推廣應用下去,因此,只有專業人員在編制對於執行速度有很高要求的程序時才採用這種代碼。
2.匯編語言
為了減輕編程者的勞動強度,人們使用一些用於幫助記憶的符號來代替機器語言中的0、1機器指令代碼序列,使得編程效率和質量得到極大的提高。把這些助記符組成的指令系統稱為匯編語言。匯編語言是指令與機器語言指令基本上是一一對應的。由於這些助記符號不能被機器直接識別,所以匯編語言代碼程序必須被編譯成機器語言程序才能被機器理解和執行。編譯之前的程序被稱為「源程序」,編譯之後的被稱為「目標程序」。
匯編語言與機器語言都是因CPU的不同而不同, 所以統稱為「面向機器的語言」。使用這類語言,可以編出效率極高的程序,但對程序設計人員的要求也很高。他們不僅要考慮解題思路,還要熟悉機器的內部結構,一般的人很難掌握這類程序設計語言,還是不能大范圍推廣應用。
3.面向過程的語言
面向過程思想是一種以過程為中心的編程思想,是以什麼正在發生為主要目標進行編程。面向過程就是分析出解決問題所需要的步驟,然後用函數把這些步驟一步一步實現,使用的時候一個一個依次調用就可以了。
把解題的過程看做是數據被加工的過程,這種程序設計語言稱為面向過程的程序設計語言。常用的面向過程的語言有C、Fortran、Basic、Pascal等。使用這類編程語言,程序設計者可以不關心機器的內部結構甚至工作原理,把主要精力集中在解決問題的思路和方法上。這類擺脫了硬體束縛的程序設計語言被統稱為高級語言。高級語言的出現大大地提高了編程效率,使人們能夠開發出越來越大、功能越來越強的程序。要運行使用面向過程語言編制的程序,一般有兩種方法:(1)解釋型,(2)編譯型。
解釋型語言在程序編制完成之後,按照程序編排的順序一條條地把指令語句轉換為機器代碼然後執行。因為每次運行中每條語句都要進行轉換和執行這兩個步驟,所以解釋型語言的執行速度不快,並且每次執行都離不開語言環境。
編譯型語言在程序設計完成之後,使用語言本身提供的編譯(Compile)程序與連接(Link)程序把源程序編譯連接成為可執行文件(擴展名一般為「.exe」)。可執行文件就能脫離語言設計環境獨立運行了。當前比較流行的程序設計語言多數是編譯型的。也有些語言既可以解釋型地運行程序,也可以對程序進行編譯連接。
解釋型運行往往用在程序的調試過程中,而設計完成之後就可以把它編譯成為獨立的可執行文件。
計算機只能識別0、1,並不能能識別其他的語言。程序員在開發的時候,可以使用很多種語言,如c語言,java,python。使用不同的語言開發出來的程序,如果想要執行,那麼最終必須要變成機器語言才能執行。那怎麼樣變成機器語言,我們大家可以找一個翻譯。這個翻譯就專門負責把編寫的代碼翻譯成機器能夠識別的機器語言,叫做編譯器,不同的編譯器,就負責把不同的語言翻譯成計算機能夠識別的機器語言來,這個就是編譯器的作用。
根據編譯器對源代碼翻譯的方式不同,編譯器分成兩種類型,一種類型叫編譯器。而另一種類型叫做解釋器。
使用編譯器編譯的語言,通常稱為編譯性語言,而使用解釋器解釋的語言叫做解釋性語什麼又是編譯性語言,什麼又是解釋性語言?
這兩種語言到底是怎麼工作的?最典型的代表就是C語言、C 這種語言都叫做編譯性語言。編譯性語言是怎麼工作的,人們來看c語言或者C 的程序在自己的開發環境內來編寫代碼。那當程序開發完成之後,成員就把開發完成的源代碼統一交給編譯器。編譯器對所有源代碼進行翻譯。翻譯成機器語言,並且最終保存成一個可執行的文件,當我們需要執行這個文件的時候,在windows下最常見的操作就是雙擊一下可執行文件的圖標,就可以把這個文件交給CPU去執行。編譯性語言的特點,程序員在自己的開發環境內開發程序開發完成之後,統一交給編譯器。編譯器統一進行翻譯,並且最終生成一個獨立的可執行文件。用戶在需要的時候,就可以執行可執行文件看到最終的效果。
解釋性語言的特點,python語言就是一個解釋性語言,那解釋性語言在開發的時候,跟編譯性語言並沒有太大的區別,成員仍然是在自己的開發環境內來編寫代碼。假設現在寫了三行代碼,那這三行代碼怎麼運行啊?要想運行解釋性語言,我們就把這個源程序丟給解釋器。解釋器拿到源程序之後,會按照從上向下的方式逐一讀取代碼中央解釋器稱一行一行來翻譯的。首先讀出第一行代碼,就立刻翻譯成機器碼。翻譯完成之後,就丟給CPU去執行CPU在執行的過程中,解釋器在讀取第二行代碼進行翻譯。翻譯完成之後,再交給CPU去執行,然後依次類推,從上到下一次讀取每行代碼讀取一行。翻譯一行執行一行。
編譯性語言是統一編譯一次性執行。
解釋性語言是一行一行代碼進行翻譯,翻譯一行執行一行,編譯性語言最終產生的文件執行速度快,解釋性語言執行速度慢。因為最終生成的可執行文件中不需要任何的介入。
解釋性語言不同。解釋語言在執行的時候,必須是翻譯一行執行一行。解釋性語言的執行速度就相對慢一些,需要考慮的因素就所謂跨平台,就是我們開發完成的程序,既可以在windows上運行,也可以在linux上運行,還可以在MAC上運行一次編寫在任何一個平台上都能運行,這種方式就叫做跨平台。
如果我們使用的編譯器是在windows平台上編譯的程序,那麼最終生成的可執行文件只能在windows平台上運行,它並不能夠在linux上運行,並不能也不能在MAC上運行,這個是編譯性語言的特點。如果使用某一個操作系統的編譯器,那麼,這個編譯器最終生成的可執行文件就只能在這個操作系統上運行,而不能在其他操作系統上運行。
解釋性語言相對來說就簡單了,程序員仍按照習慣的方式來編寫代碼,程序編寫完成之後,如果想要執行,如果是windows,就在windows上安裝一套windows的解釋器,如果想在linux上執行呢,就在linux上安裝一套linux的解釋器,就是在不同的操作系統上安裝不同的解釋器。既然在每個操作系統上都已經安裝了解釋器,那源代碼就不需要任何的修改。這個就是解釋性語言在跨平台上的優勢。至於程序的執行是解釋器的工作,只需要在不同操作系統中安裝不同的解釋器同一份代碼就可以在不同操作系統中執行了。
開發完成的源程序要想執行,就必須找一個翻譯性語言要找的翻譯叫做編譯器,解釋性語言要找的翻譯叫做解釋器,而從執行效率上講,編譯性語言執行效率要比解釋性語言執行效率高,但是從跨平台來講解釋性語言跨平台能力要比邊形語言跨平台能力要強好。
4.面向對象的程序設計語言
隨著像Windows這樣具有圖形用戶界面的操作系統的廣泛使用,人們又形成了一種面向對象的程序設計思想。這種思想把整個現實世界或是其一部分看做是由不同種類對象(Object)組成的有機整體。同一類型的對象既有共同點,又有各自不同的特性。各種類型的對象之間通過發送消息進行聯系,消息能夠激發對象做出相應的反應,從而構成了一個運動的整體。採用了面向對象思想的程序設計語言就是面向對象的程序設計語言,當前使用較多的面向對象語言有Visual_Basic、C++、Java等。
面向對象語言:是一類以對象作為基本程序結構單位的程序設計語言,指用於描述的設計是以對象為核心,而對象是程序運行時刻的基本成分。面向對象語言:系統中的基本構件可識認為一組可識別的離散對象,在基本層次關系的不同類中共享數據和操作。
Python是一個完全面向對象的語言,那什麼又是面向對象?
面向對象是一種思維方式,同時也是一門程序設計技術。程序員每天的工作是使用自己熟悉的語言來解決一個又一個問題,那在解決問題的時候,有兩種方式,第一種方式要解決這個問題,自己一步一步把這個問題解決掉,自己來逐步的解決一個問題。第二種方式就是面向對象的這種解決問題的方法,用面向對象來解決一個問題的時候,通常我們要首先考慮由誰(這里指對象,而其具備解決該問題能力)來做。找一個別人來幫助自己做事情,而我們找到了這個對象,已經具備了解決這個問題的能力。這個對象做完之後,問題也同樣得到了解決。這個就是面向對象的解決方法。
第一種方式自己逐步來解決問題的每一個步驟,第二種方式我們來找一個對象替自己做事情,對象又具有做這件事情的能力。
如果開發程序,當然更傾向於第二種方式。找個對象來完成,這個思路就是面向對象的思維方式。在做事情的時候,找一個具有能力的對象,幫我們把問題解決掉就好了。這個就是從思維方式角度所謂面向對象的概念。
python是一個完全面向對象的語言。在python中,無論是函數,模塊,數字以及字元串等等等等,全部都是對象。在python中所有的東西都是對象,python這門語言中已經提供有各種各樣,具有很強大能力的對象。在工作中遇到不同的問題,就找不同的對象來幫我們解決問題就可以。這個是python面向對象語言的一個特點,同時大家在看第二個特點。Python應用一個強大的標准庫,所以強大的標准庫在python這門語言中已經內置有非常非常多,是具有強大能力的對象。當在開發時遇到不同的問題,可以在標准庫中來找不同的對象,幫我們把問題解決掉就好,在python的標准庫中提供有類似於系統管理,網路文本處理等,它的功能還是非常強大的。第三個特點:Python社區提供了大量的第三方模塊,什麼又是第三方模塊?所謂第三方模塊就是跟標准庫類似的一個庫,但是第三方模塊並不是由官方來開發的,而是由網路上非常非常多python愛好者來開發的。那這些愛好者為什麼要開發第三方模塊原因很簡單,因為標准估雖然很強大,但是標准庫的力量有限,而全世界有非常多的python愛好者以及開發團隊或者公司。針對當今市場上最主流的一些應用技術開發有非常多的模塊,把自己開發好的這些模塊開源出來。這些模塊都涉及到哪些領域,分別包括有科學計算,人工智慧機器學習,以及web開發大數據等。在python社區中有大量的第三方模塊,而這些第三方模塊在使用的,基本的方式是跟標准庫類似的,python這門語言既有一個能力非常強大的標准庫,又有一個非常非常豐富的第三方模塊。那麼,作為python的成員在開發的時候是不就非常容易了。面向對象的思維方式,就是在做事情之前,先找一個具有能力的對象,幫我們來解決問題。而python的標准庫也好。Python第三方模塊也好,實際上內置有大量的具有強大能力的對象,我們在使用python進行日常開發時,只需要從標准庫中或者第三方模塊中找到。能夠幫我們解決問題的對象,並且使用對象已經具有的能力,通常就可以快速的把我們日常開發中需要解決的問題搞定了,Python提供有強大的標准庫和第三方模塊。在開發時,只需要找到相應具有能力的對象,就可以解決日常工作中遇到的問題了。
程序設計語言的支持環境
操作系統是計算機最重要的一類軟體,其他程序的運行都要在操作系統支持與控制下進行。設計者編制的源程序並不能直接操作計算機,而要在要具體的程序設計語言的支持下通過操作系統來完成。它們之間如何相互配合,因語言、操作系統、計算機硬體的不同而不同。大多數情況下,編程人員沒必要關心程序每一個細節。
『伍』 各種編程語言的深度學習庫整理大全!
各種編程語言的深度學習庫整理大全!
Python1. Theano是一個python類庫,用數組向量來定義和計算數學表達式。它使得在Python環境下編寫深度學習演算法變得簡單。在它基礎之上還搭建了許多類庫。
1.Keras是一個簡潔、高度模塊化的神經網路庫,它的設計參考了Torch,用Python語言編寫,支持調用GPU和CPU優化後的Theano運算。
2.Pylearn2是一個集成大量深度學習常見模型和訓練演算法的庫,如隨機梯度下降等。它的功能庫都是基於Theano之上。
3.Lasagne是一個搭建和訓練神經網路的輕量級封裝庫,基於Theano。它遵循簡潔化、透明化、模塊化、實用化和專一化的原則。
4.Blocks也是一個基於Theano的幫助搭建神經網路的框架。
2. Caffe是深度學習的框架,它注重於代碼的表達形式、運算速度以及模塊化程度。它是由伯克利視覺和學習中心(Berkeley Vision and Learning Center, BVLC)以及社區成員共同開發。谷歌的DeepDream項目就是基於Caffe框架完成。這個框架是使用BSD許可證的C++庫,並提供了Python調用介面。
3. nolearn囊括了大量的現有神經網路函數庫的封裝和抽象介面、大名鼎鼎的Lasagne以及一些機器學習的常用模塊。
4. Genism也是一個用Python編寫的深度學習小工具,採用高效的演算法來處理大規模文本數據。
5. Chainer在深度學習的理論演算法和實際應用之間架起一座橋梁。它的特點是強大、靈活、直觀,被認為是深度學習的靈活框架。
6. deepnet是基於GPU的深度學習演算法函數庫,使用Python語言開發,實現了前饋神經網路(FNN)、受限玻爾茲曼機(RBM)、深度信念網路(DBN)、自編碼器(AE)、深度玻爾茲曼機(DBM)和卷積神經網路(CNN)等演算法。
7. Hebel也是深度學習和神經網路的一個Python庫,它通過pyCUDA控制支持CUDA的GPU加速。它實現了最重要的幾類神經網路模型,提供了多種激活函數和模型訓練方法,例如momentum、Nesterov momentum、dropout、和early stopping等方法。
8. CXXNET是一個基於MShadow開發的快速、簡潔的分布式深度學習框架。它是一個輕量級、易擴展的C++/CUDA神經網路工具箱,提供友好的Python/Matlab介面來進行訓練和預測。
9. DeepPy是基於NumPy的深度學習框架。
10. DeepLearning是一個用C++和Python共同開發的深度學習函數庫。
11. Neon是Nervana System 的深度學習框架,使用Python開發。
Matlab
1. ConvNet 卷積神經網路是一類深度學習分類演算法,它可以從原始數據中自主學習有用的特徵,通過調節權重值來實現。
2. DeepLearnToolBox是用於深度學習的Matlab/Octave工具箱,它包含深度信念網路(DBN)、棧式自編碼器(stacked AE)、卷積神經網路(CNN)等演算法。
3. cuda-convet是一套卷積神經網路(CNN)代碼,也適用於前饋神經網路,使用C++/CUDA進行運算。它能對任意深度的多層神經網路建模。只要是有向無環圖的網路結構都可以。訓練過程採用反向傳播演算法(BP演算法)。
4. MatConvNet是一個面向計算機視覺應用的卷積神經網路(CNN)Matlab工具箱。它簡單高效,能夠運行和學習最先進的機器學習演算法。
CPP
1. eblearn是開源的機器學習C++封裝庫,由Yann LeCun主導的紐約大學機器學習實驗室開發。它用基於能量的模型實現卷積神經網路,並提供可視化交互界面(GUI)、示例以及示範教程。
2. SINGA是Apache軟體基金會支持的一個項目,它的設計目標是在現有系統上提供通用的分布式模型訓練演算法。
3. NVIDIA DIGITS是用於開發、訓練和可視化深度神經網路的一套新系統。它把深度學習的強大功能用瀏覽器界面呈現出來,使得數據科學家和研究員可以實時地可視化神經網路行為,快速地設計出最適合數據的深度神經網路。
4. Intel? Deep Learning Framework提供了Intel?平台加速深度卷積神經網路的一個統一平台。
Java
1. N-Dimensional Arrays for Java (ND4J) 是JVM平台的科學計算函數庫。它主要用於產品中,也就是說函數的設計需求是運算速度快、存儲空間最省。
2. Deeplearning4j 是第一款商業級別的開源分布式深度學習類庫,用Java和Scala編寫。它的設計目的是為了在商業環境下使用,而不是作為一款研究工具。
3. Encog是一個機器學習的高級框架,涵蓋支持向量機、人工神經網路、遺傳編程、貝葉斯網路、隱馬可夫模型等,也支持遺傳演算法。
JavaScript
1. Convnet.js 由JavaScript編寫,是一個完全在瀏覽器內完成訓練深度學習模型(主要是神經網路)的封裝庫。不需要其它軟體,不需要編譯器,不需要安裝包,不需要GPU,甚至不費吹灰之力。
Lua
1. Torch是一款廣泛適用於各種機器學習演算法的科學計算框架。它使用容易,用快速的腳本語言LuaJit開發,底層是C/CUDA實現。Torch基於Lua編程語言。
Julia
1. Mocha是Julia的深度學習框架,受C++框架Caffe的啟發。Mocha中通用隨機梯度求解程序和通用模塊的高效實現,可以用來訓練深度/淺層(卷積)神經網路,可以通過(棧式)自編碼器配合非監督式預訓練(可選)完成。它的優勢特性包括模塊化結構、提供上層介面,可能還有速度、兼容性等更多特性。
Lisp
1. Lush(Lisp Universal Shell)是一種面向對象的編程語言,面向對大規模數值和圖形應用感興趣的廣大研究員、實驗員和工程師們。它擁有機器學習的函數庫,其中包含豐富的深度學習庫。
Haskell
1. DNNGraph是Haskell用於深度神經網路模型生成的領域特定語言(DSL)。
.NET
1. Accord.NET 是完全用C#編寫的.NET機器學習框架,包括音頻和圖像處理的類庫。它是產品級的完整框架,用於計算機視覺、計算機音頻、信號處理和統計應用領域。
R
1. darch包可以用來生成多層神經網路(深度結構)。訓練的方法包括了對比散度的預訓練和眾所周知的訓練演算法(如反向傳播法或共軛梯度法)的細調。
2. deepnet實現了許多深度學習框架和神經網路演算法,包括反向傳播(BP)、受限玻爾茲曼機(RBM)、深度信念網路(DBP)、深度自編碼器(Deep autoencoder)等等。
『陸』 13個最常用的Python深度學習庫介紹
13個最常用的Python深度學習庫介紹
如果你對深度學習和卷積神經網路感興趣,但是並不知道從哪裡開始,也不知道使用哪種庫,那麼這里就為你提供了許多幫助。
在這篇文章里,我詳細解讀了9個我最喜歡的Python深度學習庫。
這個名單並不詳盡,它只是我在計算機視覺的職業生涯中使用並在某個時間段發現特別有用的一個庫的列表。
這其中的一些庫我比別人用的多很多,尤其是Keras、mxnet和sklearn-theano。
其他的一些我是間接的使用,比如Theano和TensorFlow(庫包括Keras、deepy和Blocks等)。
另外的我只是在一些特別的任務中用過(比如nolearn和他們的Deep Belief Network implementation)。
這篇文章的目的是向你介紹這些庫。我建議你認真了解這里的每一個庫,然後在某個具體工作情境中你就可以確定一個最適用的庫。
我想再次重申,這份名單並不詳盡。此外,由於我是計算機視覺研究人員並長期活躍在這個領域,對卷積神經網路(細胞神經網路)方面的庫會關注更多。
我把這個深度學習庫的列表分為三個部分。
第一部分是比較流行的庫,你可能已經很熟悉了。對於這些庫,我提供了一個通俗的、高層次的概述。然後,針對每個庫我詳細解說了我的喜歡之處和不喜歡之處,並列舉了一些適當的應用案例。
第二部分進入到我個人最喜歡的深度學習庫,也是我日常工作中使用最多的,包括:Keras、mxnet和sklearn-theano等。
最後,我對第一部分中不經常使用的庫做了一個「福利」板塊,你或許還會從中發現有用的或者是在第二板塊中我還沒有嘗試過但看起來很有趣的庫。
接下來就讓我們繼續探索。
針對初學者:
Caffe
提到「深度學習庫」就不可能不說到Caffe。事實上,自從你打開這個頁面學習深度學習庫,我就敢打保票你肯定聽說Caffe。
那麼,究竟Caffe是什麼呢?
Caffe是由Berkeley Vision and Learning Center(BVLC)建立的深度學習框架。它是模塊化的,速度極快。而且被應用於學術界和產業界的start-of-the-art應用程序中。
事實上,如果你去翻閱最新的深度學習出版物(也提供源代碼),你就很可能會在它們相關的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,,同樣可以說是關於Theano和深度學習更高級別的抽象。
非常核心的是,Theano是一個Python庫,用來定義、優化和評估涉及多維數組的數學表達式。 Theano通過與numpy的緊密集成,透明地使用GPU來完成這些工作。
雖然可以利用Theano建立深度學習網路,但我傾向於認為Theano是神經網路的基石,同樣的numpy是作為科學計算的基石。事實上,大多數我在文章中提到的庫都是圍繞著Theano,使自己變得更加便利。
不要誤會我的意思,我愛Theano,我只是不喜歡用Theano編寫代碼。
在Theano建設卷積神經網路就像只用本機Python中的numpy寫一個定製的支持向量機(SVM),當然這個對比並不是很完美。
你可以做到嗎?
當然可以。
它值得花費您的時間和精力嗎?
嗯,也許吧。這取決於你是否想擺脫低級別或你的應用是否需要。
就個人而言,我寧願使用像Keras這樣的庫,它把Theano包裝成更有人性化的API,同樣的方式,scikit-learn使機器學習演算法工作變得更加容易。
TensorFlow
與Theano類似,TensorFlow是使用數據流圖進行數值計算的開源庫(這是所有神經網路固有的特徵)。最初由谷歌的機器智能研究機構內的Google Brain Team研究人員開發,此後庫一直開源,並提供給公眾。
相比於Theano ,TensorFlow的主要優點是分布式計算,特別是在多GPU的環境中(雖然這是Theano正在攻克的項目)。
除了用TensorFlow而不是Theano替換Keras後端,對於TensorFlow庫我並沒有太多的經驗。然而在接下來的幾個月里,我希望這有所改變。
Lasagne
Lasagne是Theano中用於構建和訓練網路的輕量級庫。這里的關鍵詞是輕量級的,也就意味著它不是一個像Keras一樣圍繞著Theano的重包裝的庫。雖然這會導致你的代碼更加繁瑣,但它會把你從各種限制中解脫出來,同時還可以讓您根據Theano進行模塊化的構建。
簡而言之:Lasagne的功能是Theano的低級編程和Keras的高級抽象之間的一個折中。
我最喜歡的:
Keras
如果我必須選出一個最喜歡的深度學習Python庫,我將很難在Keras和mxnet中做出抉擇——但最後,我想我會選Keras。
說真的,Keras的好處我說都說不完。
Keras是一個最低限度的、模塊化的神經網路庫,可以使用Theano或TensorFlow作為後端。Keras最主要的用戶體驗是,從構思到產生結果將會是一個非常迅速的過程。
在Keras中架構網路設計是十分輕松自然的。它包括一些state-of-the-art中針對優化(Adam,RMSProp)、標准化(BatchNorm)和激活層(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的功能所在。你不能用它從頭到尾的訓練一個模型,但它的神奇之處就是可以把網路作為特徵提取器。當需要評估一個特定的問題是否適合使用深度學習來解決時,我傾向於使用這個庫作為我的第一手判斷。
nolearn
我在PyImageSearch博客上用過幾次nolearn,主要是在我的MacBook Pro上進行一些初步的GPU實驗和在Amazon EC2 GPU實例中進行深度學習。
Keras把 Theano和TensorFlow包裝成了更具人性化的API,而nolearn也為Lasagne做了相同的事。此外,nolearn中所有的代碼都是與scikit-learn兼容的,這對我來說絕對是個超級的福利。
我個人不使用nolearn做卷積神經網路(CNNs),但你當然也可以用(我更喜歡用Keras和mxnet來做CNNs)。我主要用nolearn來製作Deep Belief Networks (DBNs)。
DIGITS
DIGITS並不是一個真正的深度學習庫(雖然它是用Python寫的)。DIGITS(深度學習GPU培訓系統)實際上是用於培訓Caffe深度學習模式的web應用程序(雖然我認為你可以破解源代碼然後使用Caffe以外其他的後端進行工作,但這聽起來就像一場噩夢)。
如果你曾經用過Caffe,那麼你就會知道通過它的終端來定義.prototxt文件、生成圖像數據、運行網路並監管你的網路訓練是相當繁瑣的。 DIGITS旨在通過讓你在瀏覽器中執行這些任務來解決這個問題。
此外,DIGITS的用戶界面非常出色,它可以為你提供有價值的統計數據和圖表作為你的模型訓練。另外,你可以通過各種輸入輕松地可視化網路中的激活層。最後,如果您想測試一個特定的圖像,您可以把圖片上傳到你的DIGITS伺服器或進入圖片的URL,然後你的Caffe模型將會自動分類圖像並把結果顯示在瀏覽器中。干凈利落!
Blocks
說實話,雖然我一直想嘗試,但截至目前我的確從來沒用過Blocks(這也是我把它包括在這個列表裡的原因)。就像許多個在這個列表中的其他庫一樣,Blocks建立在Theano之上,呈現出一個用戶友好型的API。
deepy
如果讓你猜deepy是圍繞哪個庫建立的,你會猜什麼?
沒錯,就是Theano。
我記得在前一段時間用過deepy(做了初始提交),但在接下里的大概6-8個月我都沒有碰它了。我打算在接下來的博客文章里再嘗試一下。
pylearn2
雖然我從沒有主動地使用pylearn2,但由於歷史原因,我覺得很有必要把它包括在這個列表裡。 Pylearn2不僅僅是一般的機器學習庫(地位類似於scikit-learn),也包含了深度學習演算法的實現。
對於pylearn2我最大的擔憂就是(在撰寫本文時),它沒有一個活躍的開發者。正因為如此,相比於像Keras和mxnet這樣的有積極維護的庫,推薦pylearn2我還有些猶豫。
Deeplearning4j
這本應是一個基於Python的列表,但我想我會把Deeplearning4j包括在這里,主要是出於對他們所做事跡的無比崇敬——Deeplearning4j為JVM建立了一個開源的、分布式的深度學習庫。
如果您在企業工作,你可能會有一個塞滿了用過的Hadoop和MapRece伺服器的儲存器。也許這些你還在用,也許早就不用了。
你怎樣才能把這些相同的伺服器應用到深度學習里?
事實證明是可以的——你只需要Deeplearning4j。
總計
以上就是本文關於13個最常用的Python深度學習庫介紹的全部內容
『柒』 深度linux的arm-linux-gnueabihf-gcc編譯參數如何配
一般來說,交叉編譯工具是用於在一種架構的主機(例如x86)上,編譯另一種主機(例如arm)運行的程序,在這個編譯期間,需要用到的頭文件/庫,往往需要從一個叫目標文件系統(sysroot)的路徑開始查找。
sysroot里包含usr,lib,usr/lib usr/include等文件夾結構和必要的頭文件和庫,你理解為目標機器上的整個文件系統,搬到你這台電腦上,然後作為一個文件夾存在。
交叉編譯原則上不能用主機(host)的頭文件,
這首先是因為編譯器在查找頭文件的相對路徑時,交叉編譯器會配置為查找目標平台架構的位置,和主機的gcc不一樣,這也是為什麼它去arm-linux-gnueabihf這個目錄去尋找的原因。
其次主機和目標機的系統版本有差異,再加上處理器架構的差異,往往有很多兼容性問題,甚至有難以解決的編譯錯誤。
如果一定要用本機的頭文件系統來湊合,那麼需要把所有的-I都列出來,即不僅需要-I/usr/include,還需要-I/usr/include/xxx,甚至要創建一些文件夾的符號鏈接指向你主機的這些頭文件文件夾。即使這些,往往也未必成功,有些頭文件不同的系統架構,會不完全一樣甚至缺失。
交叉編譯一般無法使用主機的庫(so)文件
主機和目標機往往架構不同,庫完全不能使用
可能遇到主機和目標機架構相同的情況,比如你在intel64上編譯一套運行在intel64位手機的程序,但是庫兼容性的問題仍然存在。
最後結論:你這個問題,如果你是為了另一套機器(比如arm開發板編譯),那麼需要搞一套目標機的文件系統才能順利編譯。
對了,目標文件系統需要編譯了python和dev頭文件/庫,好多嵌入式設備裁剪的很厲害,都不用python。
