天天看點

Keras新手“入坑”指南

Keras新手“入坑”指南

對于所有想要開始深度學習的人來說,有很多神經網絡架構、庫和api等都是非常重要的。可是…為什麼要用Keras呢?

Keras是一種進階的神經網絡API,它運作在許多底層庫之上,這些庫被用作後端,包括TensorFlow、Theano、CNTK和PlaidML等。Keras代碼是可移植的,這意味着你可以使用Keras 實作一個神經網絡,然後使用Theano作為一個備份,再指定後端在TensorFlow上運作,并且不需要對代碼進行進一步的更改。資料科學家和機器學習專家Charles Martin總結了這樣一句話:

我們已經使用這些算法超過10年了。這并不容易,但對一個好的黑客來說是足夠的。對我來說,Keras使得那些被認為不可用的人工智能産品能夠發揮它們的價值。

Keras是一種易于使用的神經網絡庫,它可以促進簡單直覺的文法。在某種程度上講,它還面向神經網絡技術消費者,而不隻是生産商。這兩組之間的界限并不是很明确;确切地說,到底是什麼構成了機器學習算法的設計和實作,而不是修改已經準備好的機器呢?這就類似于是先有雞還是先有蛋的問題,這并不是一個合适的讨論話題。然而,和其他已經建立的主流神經網絡庫相比,Keras更适合于資料科學的實踐。事實上,我想說的是,Keras是任何一個使用神經網絡的資料科學家的工具。

這篇教程的目的是讓你以最快地速度了解Keras,如果你已經熟悉了神經網絡,那就不是一個特别困難的任務了。為了達到這個目的,最好對神經網絡有一定的了解。

<b>步驟一:神經網絡基礎</b>

神經網絡是基于生物學中神經網絡的基本原理,在了解和抽象了人腦結構和外界刺激響應機制後,以網絡拓撲知識為理論基礎,模拟人腦的神經系統對複雜資訊的處理機制的一種數學模型。該模型以并行分布的處理能力、高容錯性、智能化和自學習等能力為特征,将資訊的加工和存儲結合在一起。它實際上是一個有大量簡單元件互相連接配接而成的複雜網絡,具有高度的非線性,能夠進行複雜的邏輯操作和非線性關系實作的系統。

神經網絡是一種運算模型,由大量的節點(或稱神經元)之間互相聯接構成。每個節點代表一種特定的輸出函數,稱為激活函數。每兩個節點間的連接配接都代表一個對于通過該連接配接信号的權重值,稱之為權重,神經網絡就是通過這種方式來模拟人類的記憶。網絡的輸出則取決于網絡的結構、網絡的連接配接方式、權重和激活函數。

神經網絡中,神經元處理單元可表示不同的對象,例如特征、字母、概念,或者一些有意義的抽象模式。網絡中處理單元的類型分為三類:輸入單元、輸出單元和隐單元。輸入單元接受外部世界的信号與資料;輸出單元實作系統處理結果的輸出;隐單元是處在輸入和輸出單元之間,不能由系統外部觀察的單元。神經元間的連接配接權值反映了單元間的連接配接強度,資訊的表示和處理展現在網絡處理單元的連接配接關系中。神經網絡是一種非程式化、适應性、大腦風格的資訊處理,其本質是通過網絡的變換和動力學行為得到一種并行分布式的資訊處理功能,并在不同程度和層次上模仿人腦神經系統的資訊處理功能。

神經網絡,是一種應用類似于大腦神經突觸連接配接結構進行資訊處理的數學模型,它是在人類對自身大腦組織結合和思維機制的認識了解基礎之上模拟出來的,它是根植于神經科學、數學、思維科學、人工智能、統計學、實體學、計算機科學以及工程科學的一門技術。

Keras新手“入坑”指南

<b>步驟二:Keras基礎知識</b>

首先,Keras到底是什麼?

Keras是一個進階神經網絡API,用Python編寫,能夠在TensorFlow、CNTK或Theano上面運作。它的開發重點是支援快速實驗,能夠以最短的時間從想法到結果。如果你需要有如下特點的深度學習庫:

1、允許簡單快速的原型設計(友好性、子產品性和可擴充性)。

2、支援卷積網絡和循環網絡,以及兩者的組合。

3、在CPU和GPU上無縫運作。

那麼你就可以使用Keras。

<b>步驟三:Keras的概述</b>

如果你仍然有疑問,為什麼你會選擇Keras而不是TensorFlow,請讀一下這篇文章:

<a href="https://medium.com/implodinggradients/tensorflow-or-keras-which-one-should-i-learn-5dd7fa3f9ca0" target="_blank">TensorFlow還是Keras?我應該學哪一個?</a>

最後,關于更改Keras後端,請參閱這個文檔頁面:

<a href="https://keras.io/backend/" target="_blank">Keras後端</a>

<b>步驟四:慢慢地學習Keras</b>

讓我們做一件事:當人們開始使用一個新的深度學習庫時,首先要做的事情之一就是:實作一個簡單的邏輯回歸模型。

如果你在之前的步驟中觀看了Valerio的視訊,那麼你可能已經得到了你需要的東西。如果沒有,那就從談話中引用他的筆記。一般情況下,你可以閱讀整個過程,再對TensorFlow、Theano和Keras的實作代碼進行比較。如果你隻對Keras 代碼感興趣,那麼可以跳過大約一半。

<a href="https://github.com/leriomaggio/deep-learning-keras-tensorflow/blob/euroscipy2017/1%20Multi-layer%20Fully%20Connected%20Networks.ipynb" target="_blank">多層完全連接配接網絡</a>

首先,確定你已經檢視了下面的Keras文檔頁面,這些文檔頁面描述了這兩種模式(已經在上面提到的)和層。

現在,請遵循這個基礎,通過使用神經網絡去實作一些關于三連棋遊戲的東西。

完成了這些步驟之後,你就應該準備好實作一些更複雜的架構了。

<b>步驟五:實作卷積神經網絡</b>

要在Keras中實作卷積神經網絡(CNN),首先要閱讀它的卷積層的文檔:

<a href="https://keras.io/layers/convolutional/" target="_blank">Keras卷積層</a>

在此之後,請檢視在Keras中關于CNNs的以下教程。第一種方法采用了較慢的方法,并且涵蓋了你現在應該知道的大部分内容,而第二種則考慮了一些額外的主題,例如避免過度使用。這并不一定是一種非此即彼的方法;你可能會在兩種模式中發現各自的價值:

<a href="https://sempwn.github.io/blog/2017/04/06/conv_net_intro" target="_blank">麥克歐文的卷積神經網絡的介紹</a>

<b>步驟六:實作一個循環的神經網絡</b>

要在Keras中實作一個循環的神經網絡(RNN),首先要閱讀它的循環層的文檔:

<a href="https://keras.io/layers/recurrent/" target="_blank">Keras循環層</a>

在此之後,嘗試看Chris Albon的教程:實作一個長期的短期記憶(LSTM)網絡——一種主要的RNN:

<a href="https://chrisalbon.com/deep-learning-keras/lstm_recurrent_neural_network.html" target="_blank">LSTM循環性神經網絡</a>

<b>步驟七:接下來該做什麼?</b>

在這一點上,你應該對Keras有一個堅實的了解,包括為什麼要使用它,它在某些情況下優于其他庫的優點,并使用它來實作各種網絡架構。你現在是個專家,對吧?

好吧,也許不是。但希望你已經掌握了基本知識。當你想要超越基本的時候,最好的方法就是閱讀Keras的官方教程:

<a href="https://blog.keras.io/category/tutorials.html" target="_blank">Keras教程</a>

在此之後,檢視Keras示例,其中包括了遠景模型示例、文本和序列示例、生成模型示例等等。

<a href="https://github.com/fchollet/keras/tree/master/examples" target="_blank">Keras的示例</a>

另外,如何挑戰你自己,對你在之前的步驟中實作的一些模型進行微調呢?更改優化器,添加擴充層,使用激活函數。或者使用一些Keras量度标準來回顧并判斷你的模型的性能。Keras文檔是一個很好的開始:

<a href="https://keras.io/metrics/" target="_blank">Keras名額</a>

<a href="https://keras.io/getting-started/faq/" target="_blank">Keras的常見問題</a>

原文連結:https://www.kdnuggets.com/2017/10/seven-steps-deep-learning-keras.html