詳細的中文文檔,目錄如下:
以下內容摘自keras中文文檔
這就是KerasKeras是一個極簡和高度模塊化的神經網絡庫,Keras由純Python編寫而成並基於Theano或Tensorflow。Keras 為支持快速實驗而生,如果你有如下需求,請選擇Keras:
Keras適用的Python版本是:Python 2.7-3.5
Keras的設計原則是
模塊性:模型可理解為一個獨立的序列或圖,完全可配置的模塊以最少的代價自由組合在一起。具體而言,網絡層、損失函數、優化器、初始化策略、激活函數、正則化方法都是獨立的模塊,你可以使用它們來構建自己的模型。
極簡主義:每個模塊都應該儘量的簡潔。每一段代碼都應該在初次閱讀時都顯得直觀易懂。沒有黑魔法,因為它將給迭代和創新帶來麻煩。
易擴展性:添加新模塊超級簡單的容易,只需要仿照現有的模塊編寫新的類或函數即可。創建新模塊的便利性使得Keras更適合於先進的研究工作。
與Python協作:Keras沒有單獨的模型配置文件類型(作為對比,caffe有),模型由python代碼描述,使其更緊湊和更易debug,並提供了擴展的便利性。
Keras從2015年3月開始啟動,經過一年多的開發,目前Keras進入了1.0的時代。Keras 1.0依然遵循相同的設計原則,但與之前的版本相比有很大的不同。如果你曾經使用過此前的其他版本Keras。你或許會關心1.0的新特性。
泛型模型:簡單和強大的新模塊,用於支持複雜深度學習模型的搭建。
更優秀的性能:現在,Keras模型的編譯時間得到縮短。所有的RNN現在都可以用兩種方式實現,以供用戶在不同配置任務和配置環境下取得最大性能。現在,基於Theano的RNN也可以被展開,以獲得大概25%的加速計算。
測量指標:現在,你可以提供一系列的測量指標來在Keras的任何監測點觀察模型性能。
更優的用戶體驗:我們面向使用者重新編寫了代碼,使得函數API更簡單易記,同時提供更有效的出錯信息。
新版本的Keras提供了Lambda層,以實現一些簡單的計算任務。
...
如果你已經基於Keras0.3編寫了自己的層,那麼在升級後,你需要為自己的代碼做以下調整,以在Keras1.0上繼續運行。請參考編寫自己的層
關於Keras-cn本文檔是Keras文檔的中文版,包括keras.io的全部內容,以及更多的例子、解釋和建議,目前,文檔的計劃是:
1.x版本:現有keras.io文檔的中文翻譯,保持與官方文檔的同步
2.x版本:完善所有【Tips】模塊,澄清深度學習中的相關概念和Keras模塊的使用方法
3.x版本:增加Keras相關模塊的實現原理和部分細節,幫助用戶更準確的把握Keras,並添加更多的示例代碼
現在,keras-cn的版本號將簡單的跟隨最新的keras release版本
本文檔的額外模塊還有:
一些基本概念:位於快速開始模塊的一些基本概念簡單介紹了使用Keras前需要知道的一些小知識,新手在使用前應該先閱讀本部分的文檔。
Keras安裝和配置指南,提供了詳細的Linux和Windows下Keras的安裝和配置步驟。
深度學習與Keras:位於導航欄最下方的該模塊翻譯了來自Keras作者博客keras.io和其他Keras相關博客的文章,該欄目的文章提供了對深度學習的理解和大量使用Keras的例子,您也可以向這個欄目投稿。 所有的文章均在醒目位置標誌標明來源與作者,本文檔對該欄目文章的原文不具有任何處置權。如您仍覺不妥,請聯繫本人(moyan_work@foxmail.com)刪除。
快速開始:30s上手KerasKeras的核心數據結構是「模型」,模型是一種組織網絡層的方式。Keras中主要的模型是Sequential模型,Sequential是一系列網絡層按順序構成的棧。你也可以查看泛型模型來學習建立更複雜的模型
Sequential模型如下
from keras.models import Sequentialmodel = Sequential()
將一些網絡層通過.add()堆疊起來,就構成了一個模型:
from keras.layers import Dense, Activationmodel.add(Dense(output_dim=64, input_dim=100))model.add(Activation("relu"))model.add(Dense(output_dim=10))model.add(Activation("softmax"))
完成模型的搭建後,我們需要使用.compile()方法來編譯模型:
model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])
編譯模型時必須指明損失函數和優化器,如果你需要的話,也可以自己定製損失函數。Keras的一個核心理念就是簡明易用同時,保證用戶對Keras的絕對控制力度,用戶可以根據自己的需要定製自己的模型、網絡層,甚至修改原始碼。
from keras.optimizers import SGDmodel.compile(loss='categorical_crossentropy', optimizer=SGD(lr=0.01, momentum=0.9, nesterov=True))
完成模型編譯後,我們在訓練數據上按batch進行一定次數的迭代訓練,以擬合網絡,關於為什麼要使用『batch』,請參考一些基本概念
model.fit(X_train, Y_train, nb_epoch=5, batch_size=32)
當然,我們也可以手動將一個個batch的數據送入網絡中訓練,這時候需要使用:
model.train_on_batch(X_batch, Y_batch)
隨後,我們可以使用一行代碼對我們的模型進行評估,看看模型的指標是否滿足我們的要求:
loss_and_metrics = model.evaluate(X_test, Y_test, batch_size=32)
或者,我們可以使用我們的模型,對新的數據進行預測:
classes = model.predict_classes(X_test, batch_size=32)proba = model.predict_proba(X_test, batch_size=32)
搭建一個問答系統、圖像分類模型,或神經圖靈機、word2vec詞嵌入器就是這麼快。支撐深度學習的基本想法本就是簡單的,現在讓我們把它的實現也變的簡單起來!
為了更深入的了解Keras,我們建議你查看一下下面的兩個tutorial
還有我們對一些概念的解釋
在Keras代碼包的examples文件夾裡,我們提供了一些更高級的模型:基於記憶網絡的問答系統、基於LSTM的文本的文本生成等。
安裝Keras使用了下面的依賴包:
當使用Theano作為後端時:
當使用TensorFlow為後端時:
【Tips】「後端」翻譯自backend,指的是Keras依賴於完成底層的張量運算的軟體包。【@Bigmoyan】
安裝Keras時,請cd到Keras的文件夾中,並運行下面的安裝命令:
sudo python setup.py install
你也可以使用PyPI來安裝Keras
sudo pip install keras
對於在Windows上使用Keras的同學,請移步 Keras安裝和配置指南
在Theano和TensorFlow間切換Keras默認使用Theano作為後端來進行張量操作,如需切換到TensorFlow,請查看這裡
技術支持你可以在Keras Google group裡提問以獲得幫助,如果你生活在中國大陸的話,梯子請自備
你也可以在Github issues裡提問。在提問之前請確保你閱讀過我們的指導
同時,我們也歡迎同學們加我們的QQ群119427073進行討論(潛水和灌水會被T,入群說明公司/學校-職位/年級)
小額贊助如果你覺得本文檔對你的研究和使用有所幫助,歡迎掃下面的二維碼對作者進行小額贊助,以鼓勵作者進一步完善文檔內容,提高文檔質量。同時,不妨為本文檔的github加顆星哦
如果你覺得有用頁面下有小額贊助的二維碼或微信/支付寶帳號,說明該頁面由其他作者貢獻,要對他們進行小額贊助請使用該頁面下的二維碼或帳號
一些基本概念在開始學習Keras之前,我們希望傳遞一些關於Keras,關於深度學習的基本概念和技術,我們建議新手在使用Keras之前瀏覽一下本頁面提到的內容,這將減少你學習中的困惑
符號計算Keras的底層庫使用Theano或TensorFlow,這兩個庫也稱為Keras的後端。無論是Theano還是TensorFlow,都是一個「符號主義」的庫。
因此,這也使得Keras的編程與傳統的Python代碼有所差別。籠統的說,符號主義的計算首先定義各種變量,然後建立一個「計算圖」,計算圖規定了各個變量之間的計算關係。建立好的計算圖需要編譯已確定其內部細節,然而,此時的計算圖還是一個「空殼子」,裡面沒有任何實際的數據,只有當你把需要運算的輸入放進去後,才能在整個模型中形成數據流,從而形成輸出值。
Keras的模型搭建形式就是這種方法,在你搭建Keras模型完畢後,你的模型就是一個空殼子,只有實際生成可調用的函數後(K.function),輸入數據,才會形成真正的數據流。
使用計算圖的語言,如Theano,以難以調試而聞名,當Keras的Debug進入Theano這個層次時,往往也令人頭痛。沒有經驗的開發者很難直觀的感受到計算圖到底在幹些什麼。儘管很讓人頭痛,但大多數的深度學習框架使用的都是符號計算這一套方法,因為符號計算能夠提供關鍵的計算優化、自動求導等功能。
我們建議你在使用前稍微了解一下Theano或TensorFlow,Bing/Google一下即可,如果我們要反baidu,那就從拒絕使用baidu開始,光撂嘴炮是沒有用的。
張量張量,或tensor,是本文檔會經常出現的一個詞彙,在此稍作解釋。
使用這個詞彙的目的是為了表述統一,張量可以看作是向量、矩陣的自然推廣,我們用張量來表示廣泛的數據類型。
規模最小的張量是0階張量,即標量,也就是一個數。
當我們把一些數有序的排列起來,就形成了1階張量,也就是一個向量
如果我們繼續把一組向量有序的排列起來,就形成了2階張量,也就是一個矩陣
把矩陣摞起來,就是3階張量,我們可以稱為一個立方體,具有3個顏色通道的彩色圖片就是一個這樣的立方體
把矩陣摞起來,好吧這次我們真的沒有給它起別名了,就叫4階張量了,不要去試圖想像4階張量是什麼樣子,它就是個數學上的概念。
張量的階數有時候也稱為維度,或者軸,軸這個詞翻譯自英文axis。譬如一個矩陣[[1,2],[3,4]],是一個2階張量,有兩個維度或軸,沿著第0個軸(為了與python的計數方式一致,本文檔維度和軸從0算起)你看到的是[1,2],[3,4]兩個向量,沿著第1個軸你看到的是[1,3],[2,4]兩個向量。
要理解「沿著某個軸」是什麼意思,不妨試著運行一下下面的代碼:
import numpy as npa = np.array([[1,2],[3,4]])sum0 = np.sum(a, axis=0)sum1 = np.sum(a, axis=1)print sum0print sum1
關於張量,目前知道這麼多就足夠了。事實上我也就知道這麼多
'th'與'tf'這是一個無可奈何的問題,在如何表示一組彩色圖片的問題上,Theano和TensorFlow發生了分歧,'th'模式,也即Theano模式會把100張RGB三通道的16×32(高為16寬為32)彩色圖表示為下面這種形式(100,3,16,32),Caffe採取的也是這種方式。第0個維度是樣本維,代表樣本的數目,第1個維度是通道維,代表顏色通道數。後面兩個就是高和寬了。
而TensorFlow,即'tf'模式的表達形式是(100,16,32,3),即把通道維放在了最後。這兩個表達方法本質上沒有什麼區別。
Keras默認的後端是Theano,所以所有層的默認數據組織形式是'th',你按這個方式組織數據即可。利用Keras自帶的資料庫模塊下載的資料庫也長這個樣子。但是如果你習慣把通道維放在最後面,記得所有需要的地方標明你的數據形式是'tf'。
唉,真是蛋疼,你們商量好不行嗎?
泛型模型算是本文檔比較原創的詞彙了,所以這裡要說一下
在原本的Keras版本中,模型其實有兩種,一種叫Sequential,稱為序貫模型,也就是單輸入單輸出,一條路通到底,層與層之間只有相鄰關係,跨層連接統統沒有。這種模型編譯速度快,操作上也比較簡單。第二種模型稱為Graph,即圖模型,這個模型支持多輸入多輸出,層與層之間想怎麼連怎麼連,但是編譯速度慢。可以看到,Sequential其實是Graph的一個特殊情況。
在現在這版Keras中,圖模型被移除,而增加了了「functional model API」,這個東西,更加強調了Sequential是特殊情況這一點。一般的模型就稱為Model,然後如果你要用簡單的Sequential,OK,那還有一個快捷方式Sequential。
由於functional model API表達的是「一般的模型」這個概念,我們這裡將其譯為泛型模型,即只要這個東西接收一個或一些張量作為輸入,然後輸出的也是一個或一些張量,那不管它是什麼鬼,統統都稱作「模型」。如果你有更貼切的譯法,也歡迎聯繫我修改。
這個概念與Keras無關,老實講不應該出現在這裡的,但是因為它頻繁出現,而且不了解這個技術的話看函數說明會很頭痛,這裡還是簡單說一下。
深度學習的優化算法,說白了就是梯度下降。每次的參數更新有兩種方式。
第一種,遍歷全部數據集算一次損失函數,然後算函數對各個參數的梯度,更新梯度。這種方法每更新一次參數都要把數據集裡的所有樣本都看一遍,計算量開銷大,計算速度慢,不支持在線學習,這稱為Batch gradient descent,批梯度下降。
另一種,每看一個數據就算一下損失函數,然後求梯度更新參數,這個稱為隨機梯度下降,stochastic gradient descent。這個方法速度比較快,但是收斂性能不太好,可能在最優點附近晃來晃去,hit不到最優點。兩次參數的更新也有可能互相抵消掉,造成目標函數震蕩的比較劇烈。
為了克服兩種方法的缺點,現在一般採用的是一種折中手段,mini-batch gradient decent,小批的梯度下降,這種方法把數據分為若干個批,按批來更新參數,這樣,一個批中的一組數據共同決定了本次梯度的方向,下降起來就不容易跑偏,減少了隨機性。另一方面因為批的樣本數與整個數據集相比小了很多,計算量也不是很大。
基本上現在的梯度下降都是基於mini-batch的,所以Keras的模塊中經常會出現batch_size,就是指這個。
順便說一句,Keras中用的優化器SGD是stochastic gradient descent的縮寫,但不代表是一個樣本就更新一回,還是基於mini-batch的。
對新手友好的小說明雖然這不是我們應該做的工作,但為了體現本教程對新手的友好,我們在這裡簡單列一下使用keras需要的先行知識。稍有經驗的研究者或開發者請忽略本節,對於新手,我們建議在開始之前,確保你了解下面提到的術語的基本概念。如果你確實對某項內容不了解,請首先查閱相關資料,以免在未來使用中帶來困惑。
關於Python顯然你應對Python有一定的熟悉,包括其基本語法,數據類型,語言特點等,如果你還不能使用Python進行程序設計,或不能避免Python中常見的一些小陷阱,或許你應該先去找個教程補充一下。這裡推一個快速學習Python的教程廖雪峰的Python教程
你應該有面向對象的概念,知道類、對象、封裝、多態、繼承、作用域等術語的含義。
你應該對Python的科學計算包和深度學習包有一定了解,這些包包含但不限於numpy, scipy, scikit-learn, pandas...
特別地,你需要了解什麼是生成器函數(generator),以及如何編寫生成器函數。什麼是匿名函數(lambda)
關於深度學習由於Keras是為深度學習設計的工具,我們這裡只列舉深度學習中的一些基本概念。請確保你對下面的概念有一定理解。
有監督學習,無監督學習,分類,聚類,回歸
神經元模型,多層感知器,BP算法
目標函數(損失函數),激活函數,梯度下降法
全連接網絡、卷積神經網絡、遞歸神經網絡
訓練集,測試集,交叉驗證,欠擬合,過擬合
數據規範化
其他我還沒想到的東西……想到再補充
其他其他需要注意的概念,我們將使用[Tips]標註出來,如果該概念反覆出現又比較重要,我們會寫到這裡。就醬,玩的愉快喲。
更多請閱讀原文查看官方網站全部文檔!
一起學習討論:qq群號 325921031;微信群請後臺留言加群或下方二維碼;
線下活動報名請後臺留言所在地區;
其他入門乾貨訪問公眾號createamind即可。