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

神經網絡入手[上]

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

神經網絡剖析

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

  • 網絡層Layers,網絡層結合形成神經網絡模型矩距;
  • 輸入數據以及對應標簽锅知;
  • 損失函數,定義用來學習的反饋信號很魂;
  • 優(yōu)化方法,定義學習過程鞠绰。
    關系圖:


    image

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

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

網絡層是神經網絡的基本數據結構罗标。一個網絡層把一個或多個數據輸入張量進行數據處理過程得到一個或多個輸出張量庸队。一些網絡層是無狀態(tài)的(沒有網絡參數),但大多數網絡層是有狀態(tài)的---網絡層的權重系數闯割,這些通過隨機梯度下降算法學到的權重張量彻消,形成了網絡層的知識
不同的網絡進行的數據處理各不相同宙拉,因此需要的數據格式及數據類型也有所差異宾尚。比如: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中仑性,不必擔心網絡的兼容性,因為添加到網絡模型中的網絡層是動態(tài)構建地右蹦,匹配接下來連接的網絡層诊杆。比如:

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能自動定義。

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

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

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

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

損失函數和優(yōu)化算法:配置學習過程的關鍵

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

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

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

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

Keras 介紹

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

  • 相同代碼同時支持CPU划栓、GPU運行兑巾;
  • 用戶友好API--網絡模型定義、訓練方便忠荞;
  • 內置卷積神經網絡蒋歌、循環(huán)神經網絡等等;
  • 支持任意的網絡架構:多輸入委煤、多輸出網絡模型堂油,網絡層共享,模型共享等等碧绞。
    Keras支持所有的Python版本府框,從2.7到3.6(mid-2017).Keras 有200000個用戶,從學術科學家和工程師到新手以及大公司的畢業(yè)生讥邻,還有興趣愛好者迫靖。Google、Netflix兴使、Uber袜香、CERN、Yelp鲫惶,Square以及上百個創(chuàng)業(yè)公司都猜使用Keras框架應用在相應的業(yè)務上蜈首。Keras也是Kaggle上流行的網絡框架。

Keras欠母,TensorFlow欢策,Theano 和 CNTK

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


image

Keras開發(fā)

Keras工作流大致如下:

  1. 定義訓練數據:輸入張量和目標張量场靴;
  2. 定義網絡層(或網絡模型):由輸入張量處理得到輸出張量;
  3. 配置訓練過程--選擇損失函數、優(yōu)化算法以及監(jiān)測指標旨剥;
  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)

一旦模型架構定義完成蚌父,不必區(qū)分到底網絡模型是怎么定義的蚕礼,之后的處理步驟沒有差別。
學習過程在編譯過程中配置:定義優(yōu)化算法梢什、損失函數和監(jiān)測指標奠蹬。比如:

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閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件僻他,死亡現場離奇詭異宵距,居然都是意外死亡,警方通過查閱死者的電腦和手機吨拗,發(fā)現死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門满哪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人劝篷,你說我怎么就攤上這事哨鸭。” “怎么了娇妓?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵像鸡,是天一觀的道長。 經常有香客問我哈恰,道長只估,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任着绷,我火速辦了婚禮蛔钙,結果婚禮上,老公的妹妹穿的比我還像新娘蓬戚。我一直安慰自己夸楣,他們只是感情好,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布子漩。 她就那樣靜靜地躺著豫喧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪幢泼。 梳的紋絲不亂的頭發(fā)上紧显,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機與錄音缕棵,去河邊找鬼孵班。 笑死,一個胖子當著我的面吹牛招驴,可吹牛的內容都是我干的篙程。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼别厘,長吁一口氣:“原來是場噩夢啊……” “哼虱饿!你這毒婦竟也來了?” 一聲冷哼從身側響起触趴,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤氮发,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后冗懦,有當地人在樹林里發(fā)現了一具尸體爽冕,經...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年披蕉,在試婚紗的時候發(fā)現自己被綠了颈畸。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡没讲,死狀恐怖承冰,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情食零,我是刑警寧澤困乒,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站贰谣,受9級特大地震影響娜搂,放射性物質發(fā)生泄漏。R本人自食惡果不足惜吱抚,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一百宇、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧秘豹,春花似錦携御、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽涮坐。三九已至,卻和暖如春誓军,著一層夾襖步出監(jiān)牢的瞬間袱讹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工昵时, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留捷雕,地道東北人。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓壹甥,卻偏偏與公主長得像救巷,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子句柠,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內容