[Deep-Learning-with-Python]神經網絡入手學習[上]

神經網絡入手[上]

  • [x] 神經網絡的核心部分
  • [x] Keras介紹
  • [ ] 使用Keras解決簡單問題:分類和回歸

神經網絡剖析

神經網絡的訓練與下列對象相關:

  • 網絡層Layers,網絡層結合形成神經網絡模型;
  • 輸入數據以及對應標簽;
  • 損失函數,定義用來學習的反饋信號;
  • 優化方法,定義學習過程。
    關系圖:


    image

    網絡層堆疊形成網絡模型,網絡模型由輸入數據得到預測值。損失函數比較預測值與實際值,得到損失函數值:用來評估預測結果的好壞;優化方法用損失值來更新網絡模型的權重系數。

網絡層:神經網絡模型的構建模塊

網絡層是神經網絡的基本數據結構。一個網絡層把一個或多個數據輸入張量進行數據處理過程得到一個或多個輸出張量。一些網絡層是無狀態的(沒有網絡參數),但大多數網絡層是有狀態的---網絡層的權重系數,這些通過隨機梯度下降算法學到的權重張量,形成了網絡層的知識
不同的網絡進行的數據處理各不相同,因此需要的數據格式及數據類型也有所差異。比如:2D張量,形狀為(samples,features)存儲簡單的向量信息,通常是全連接層(FC 或 Dense)的輸入格式要求;LSTM網絡層通常處理3D張量,形狀為(samples,timesteps,featuers)的序列數據;2D卷積層通常處理存儲在4D張量中的圖片數據。

可以把網絡層看做深度學習的樂高積木塊,通過積木塊我們可以搭建不同的網絡模型。在Keras框架中通過把相互兼容的網絡層堆疊形成數據處理過程,而網絡層的兼容性是指該網絡層接收特定形狀的輸入張量同時返回特東形狀的輸出張量
例如:

from keras import layers
layer = layers.Dense(32, input_shape=(784, ))

定義的網絡層只接收2D張量,第一維度為784,;同時網絡層輸出的第一維度為32。
在Keras中,不必擔心網絡的兼容性,因為添加到網絡模型中的網絡層是動態構建地,匹配接下來連接的網絡層。比如:

from keras import models
from keras import layers

model = models.Sequential()
model.add(layers.Dense(32, input_shape=(784, )))
model.add(layers.Dense(32))

第二個Dense層不必定義接收張量的形狀,keras能自動定義。

網絡模型:網絡層堆疊而成

一個神經網絡模型是網絡層的非循環連接而成。最常見的是網絡層的線性連接堆疊,講一個輸入張量轉換為一個輸出張量。
也存在不同的網絡拓撲結構,如:

  • 二分支網絡模型;
  • 多分支網絡模型;
  • Inception塊.

網絡模型的拓撲結構定義了一個假設空間。通過選擇網絡模型的拓撲結構,限制了假設空間能進行的張量操作,通過這些張量操作有輸出張量得到對應的輸出張量;之后尋找這些張量操作中涉及到的權重系數張量。
網絡模型結構的選擇與其說是一門科學不如說是一門藝術,盡管存在一些可以依賴的經驗和原理,但只有不斷嘗試才能使你成為一個優秀的神經網絡締造者。

損失函數和優化算法:配置學習過程的關鍵

網絡模型結構定義完成之后,仍然需要定義兩件事:

  • 損失函數:訓練過程中最小化的函數值,一種評估網絡模型的表現;
  • 優化算法:決定基于損失函數如何更新權重系數;有常見的SGD,以及變種SGD算法。

多輸出神經網絡模型可能有多個損失函數(一個輸出一個損失函數)。但是梯度下降過程必然是基于一個損失函數標量值;所以,對于有多個損失函數的網絡模型來說,所有的損失函數值必須整合(平均化處理)成一個標量值

特定問題需要選擇特定的損失函數。對于常見的問題,如:分類、回歸、序列預測,有對應的指導-選擇正確的損失函數。具體:二分類問題使用對數損失binary crossentropy,多分類問題采用分類交叉熵categorical crossentropy,回歸問題使用均方誤差,序列學習問題采用Connectionist temporal classification(CTC)損失函數等等。只有在面對真正要解決的科學問題時,才能決定要使用的損失函數類型以及定義。

Keras 介紹

Keras是一個Python語言的深度學習框架,提供了快速搞笑的深度學習網絡模型定義和訓練方法。Keras設計初衷是為了方便科學家能進行快速實驗。Keras特征:

  • 相同代碼同時支持CPU、GPU運行;
  • 用戶友好API--網絡模型定義、訓練方便;
  • 內置卷積神經網絡、循環神經網絡等等;
  • 支持任意的網絡架構:多輸入、多輸出網絡模型,網絡層共享,模型共享等等。
    Keras支持所有的Python版本,從2.7到3.6(mid-2017).Keras 有200000個用戶,從學術科學家和工程師到新手以及大公司的畢業生,還有興趣愛好者。Google、Netflix、Uber、CERN、Yelp,Square以及上百個創業公司都猜使用Keras框架應用在相應的業務上。Keras也是Kaggle上流行的網絡框架。

Keras,TensorFlow,Theano 和 CNTK

Keras 是一個模型級別的工具庫,提供構建神經網絡模型的高級API。Keras并不進行底層的操作比如張量操作和導數計算;相應地,Keras以來與特定的張量庫進行這些操作,作為Keras的背后引擎。目前,Keras支持3個背后引擎:TensorFlow、Theano和CNTK。將來,有望支持更多的深度學習框架成為Keras的背后計算引擎。


image

Keras開發

Keras工作流大致如下:

  1. 定義訓練數據:輸入張量和目標張量;
  2. 定義網絡層(或網絡模型):由輸入張量處理得到輸出張量;
  3. 配置訓練過程--選擇損失函數、優化算法以及監測指標;
  4. 通過調用模型的fit()方法在訓練數據上迭代訓練。

模型定義有兩種方法:使用Sequential類(使用于網絡層的線性堆疊,目前最常見);以及函數式API(支持任意網絡架構,更靈活)。
方法一:Sequential類

from keras import models
from keras import layers

model = models.Sequential()
model.add(layers.Dense(32, activation='relu', input_shape=(784,)))
model.add(layers.Dense(10, activation='softmax'))

方法二: 函數式API

input_tensor = layers.Input(shape=(784,))
x = layers.Dense(32, activation='relu')(input_tensor)
output_tensor = layers.Dense(10, activation='softmax')(x)

model = models.Model(inputs=input_tensor, outputs=output_tensor)

一旦模型架構定義完成,不必區分到底網絡模型是怎么定義的,之后的處理步驟沒有差別。
學習過程在編譯過程中配置:定義優化算法、損失函數和監測指標。比如:

from keras import optimizers

model.compile(optimizer=optimizer.RMSProp(lr=0.001),loss='mse',metrics=['accuracy'])

最后,通過fit()方法將numpy數組形式的輸入數據(以及對應標簽)輸入到網絡模型中進行模型的學習過程。

model.fit(input_tensor, target_tensor, batch_size=128, epochs=10)
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,825評論 6 546
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,814評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,980評論 0 384
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 64,064評論 1 319
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,779評論 6 414
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,109評論 1 330
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,099評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,287評論 0 291
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,799評論 1 338
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,515評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,750評論 1 375
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,221評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,933評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,327評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,667評論 1 296
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,492評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,703評論 2 380

推薦閱讀更多精彩內容