人工智能機(jī)器學(xué)習(xí)工具Keras快速入門教程1線性回歸

Keras是用Python編寫的開源神經(jīng)網(wǎng)絡(luò)庫侧啼,運(yùn)行在Theano或Tensorflow之上牛柒。 它設(shè)計(jì)為模塊化堪簿,快速且易于使用。 它由Google工程師Fran?oisChollet開發(fā)皮壁。

Keras不處理低級計(jì)算椭更,它使用其他庫來執(zhí)行它,稱為"后端"蛾魄。因此Keras提供高級API虑瀑,能夠在TensorFlow,CNTK或Theano之上運(yùn)行滴须。

Keras高級API處理我們制作模型舌狗,定義層或設(shè)置多個(gè)輸入輸出模型。Keras還使用損失和優(yōu)化函數(shù)編譯我們的模型扔水,使用擬合函數(shù)訓(xùn)練痛侍。 Keras不處理低級API,例如制作計(jì)算圖魔市,張量或其他變量主届。

什么是后端?

后端是Keras中的術(shù)語待德,它可以在其他庫(如Tensorflow或Theano)的幫助下執(zhí)行所有低級計(jì)算君丁,如張量積,卷積等将宪。 因此绘闷,“后端引擎”將執(zhí)行模型的計(jì)算和開發(fā)。 Tensorflow是默認(rèn)的“后端引擎”较坛,但我們可以在配置中更改印蔗。

Theano,Tensorflow和CNTK后端

Theano是由加拿大魁北克省蒙特利爾大學(xué)的MILA小組開發(fā)的Python開源項(xiàng)目燎潮。它廣泛使用喻鳄,可以使用Numpy或Scipy進(jìn)行多維數(shù)組數(shù)學(xué)運(yùn)算。 Theano可以使用GPU進(jìn)行更快的計(jì)算确封,它還可以自動(dòng)構(gòu)建用于計(jì)算梯度的符號(hào)圖除呵。 Theano聲稱它可以識(shí)別數(shù)值不穩(wěn)定的表達(dá)式并使用更穩(wěn)定的算法計(jì)算。

Tensorflow是深度學(xué)習(xí)框架中的后起之秀爪喘。 由Google的Brain團(tuán)隊(duì)開發(fā)颜曾,它是最受歡迎的深度學(xué)習(xí)工具。

另一個(gè)后端引擎是Microsoft Cognitive Toolkit或CNTK秉剑。 它是由Microsoft Team開發(fā)泛豪,可以在多GPU或多機(jī)上運(yùn)行,??用于大規(guī)模訓(xùn)練深度學(xué)習(xí)模型。 在某些情況下诡曙,據(jù)報(bào)道CNTK比其他框架更快臀叙。

后端比較

Jeong-Yoon Lee's benchmark:Theano比其他后端慢了50倍 ,但準(zhǔn)確性彼此接近价卤。

Jasmeet Bhatia:Theano比Tensorflow慢一些劝萤。 但總體準(zhǔn)確性幾乎相同。

在Theano慎璧,Tensorflow和CTK之間床嫌,TensorFlow比Theano更好。 使用TensorFlow胸私,計(jì)算時(shí)間更短厌处,CNN優(yōu)于其他計(jì)算時(shí)間。

Keras vs Tensorflow

參數(shù) Keras Tensorflow
類型 高級API 低級API
復(fù)雜 會(huì)Python即可 Tensorflow函數(shù)的語法
目的 使用標(biāo)準(zhǔn)圖層快速部署模型 允許您制作任意計(jì)算圖形或模型圖層
工具 使用其他API調(diào)試工具岁疼,如TFDBG Tensorboard可視化工具
社區(qū) 大型活躍社區(qū) 大型活躍社區(qū)和廣泛共享的資源

參考資料

Keras的優(yōu)點(diǎn)

快速部署,易于理解

Keras可以非澄逍快速地建立網(wǎng)絡(luò)模型洒敏,可以幾行制作一個(gè)簡單的網(wǎng)絡(luò)模型,Keras可以幫助你疙驾。

from keras.models import Sequential
from keras.layers import Dense, Activation

model = Sequential()
model.add(Dense(64, activation='relu', input_dim=50)) #input shape of 50
model.add(Dense(28, activation='relu')) #input shape of 50
model.add(Dense(10, activation='softmax'))

大型社區(qū)支持

有很多AI社區(qū)使用Keras進(jìn)行深度學(xué)習(xí)框架。 他們中的許多人向公眾發(fā)布他們的代碼以及教程郭毕。

有多個(gè)后端

您可以選擇Tensorflow它碎,CNTK和Theano作為Keras的后端。 您可以根據(jù)需要為不同的項(xiàng)目選擇不同的后端显押。 每個(gè)后端都有自己獨(dú)特的優(yōu)勢扳肛。

跨平臺(tái)且易于模型部署

通過各種支持的設(shè)備和平臺(tái),您可以在任何設(shè)備上部署Keras

  • iOS與CoreML
  • Android版采用Tensorflow Android乘碑,
  • 支持.js的Web瀏覽器
  • 云引擎
  • 樹莓派

多GPU支持

Keras內(nèi)置了對數(shù)據(jù)并行性的支持挖息,因此它可以處理大量數(shù)據(jù)并加快訓(xùn)練所需的時(shí)間。

Keras的缺點(diǎn)

無法處理低級API

Keras只處理在其他框架或后端引擎(如Tensorflow兽肤,Theano或CNTK)上運(yùn)行的高級API套腹。 因此,如果您制作自己的抽象層资铡,那么它并不是非常有用电禀,因?yàn)镵eras已經(jīng)預(yù)先配置了層。

安裝Keras

安裝 pip install --upgrade tensorflow, 啟用GPU支持使用pip install --upgrade tensorflow-gpu笤休。

然后pip install keras

驗(yàn)證安裝

$python
Python 3.6.5 |Anaconda, Inc.| (default, Apr 29 2018, 16:14:56) 
[GCC 7.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow
>>> import keras
Using TensorFlow backend.
>>> 

如果要修改后端尖飞,可以配置:~/.keras/keras.json。比如

{
    "floatx": "float32",
    "epsilon": 1e-07,
    "backend": "tensorflow",
    "image_data_format": "channels_last"
}

Keras深度學(xué)習(xí)基礎(chǔ)

Keras的主要結(jié)構(gòu)是模型,它定義了網(wǎng)絡(luò)的完整圖形政基。 您可以向現(xiàn)有模型添加更多圖層贞铣,以構(gòu)建項(xiàng)目所需的自定義模型。

以下是如何在深度學(xué)習(xí)中創(chuàng)建順序模型和一些常用層

1.順序模型

from keras.models import Sequential
from keras.layers import Dense, Activation,Conv2D,MaxPooling2D,Flatten,Dropout

model = Sequential()

2.卷積層

這是卷積層作為輸入層的示例沮明,輸入形狀為320x320x3辕坝,具有48個(gè)大小為3x3的濾波器,并使用ReLU作為激活函數(shù)珊擂。

input_shape=(320,320,3) #this is the input shape of an image 320x320x3
model.add(Conv2D(48, (3, 3), activation='relu', input_shape= input_shape))
model.add(Conv2D(48, (3, 3), activation='relu')) # 另一種形式

3. MaxPooling Layer

要對輸入表示進(jìn)行下采樣圣勒,請使用MaxPool2d并指定內(nèi)核大小

model.add(MaxPooling2D(pool_size=(2, 2)))

4.密度層

只需指定輸出大小即可添加完全連接的圖層

model.add(Dense(256, activation='relu'))  

5.Dropout層

model.add(Dropout(0.5))

編譯,訓(xùn)練和評估

定義模型需要訓(xùn)練它們摧扇。 首先需要使用loss函數(shù)和優(yōu)化器函數(shù)編譯網(wǎng)絡(luò)圣贸。 這將允許網(wǎng)絡(luò)改變權(quán)重并最小化損失。

model.compile(loss='mean_squared_error', optimizer='adam')

訓(xùn)練時(shí)使用fit將訓(xùn)練和驗(yàn)證數(shù)據(jù)提供給模型扛稽,可批量訓(xùn)練網(wǎng)絡(luò)并設(shè)置epoch吁峻。

model.fit(X_train, X_train, batch_size=32, epochs=10, validation_data=(x_val, y_val))

最后用測試數(shù)據(jù)評估模型。

score = model.evaluate(x_test, y_test, batch_size=32)

讓我們嘗試使用簡單的線性回歸

圖片.png

代碼: https://github.com/china-testing/python-api-tesing/blob/master/practices/keras/linear.py

訓(xùn)練數(shù)據(jù)后在张,輸出應(yīng)如下所示

Figure_1.png

執(zhí)行結(jié)果:

$ python3 linear.py 
Using TensorFlow backend.
2019-01-03 16:35:47.051990: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA
2019-01-03 16:35:47.052993: I tensorflow/core/common_runtime/process_util.cc:69] Creating new thread pool with default inter op setting: 2. Tune using inter_op_parallelism_threads for best performance.
Linear regression model is initialized with weights w: 0.33, b: 0.00
Epoch 1/30
200/200 [==============================] - 0s 704us/step - loss: 1.0424 - mean_squared_error: 1.0424
Epoch 2/30
200/200 [==============================] - 0s 330us/step - loss: 0.1406 - mean_squared_error: 0.1406
Epoch 3/30
200/200 [==============================] - 0s 334us/step - loss: 0.1359 - mean_squared_error: 0.1359
Epoch 4/30
200/200 [==============================] - 0s 333us/step - loss: 0.1316 - mean_squared_error: 0.1316
Epoch 5/30
200/200 [==============================] - 0s 335us/step - loss: 0.1276 - mean_squared_error: 0.1276
Epoch 6/30
200/200 [==============================] - 0s 334us/step - loss: 0.1240 - mean_squared_error: 0.1240
Epoch 7/30
200/200 [==============================] - 0s 333us/step - loss: 0.1206 - mean_squared_error: 0.1206
Epoch 8/30
200/200 [==============================] - 0s 335us/step - loss: 0.1175 - mean_squared_error: 0.1175
Epoch 9/30
200/200 [==============================] - 0s 335us/step - loss: 0.1146 - mean_squared_error: 0.1146
Epoch 10/30
200/200 [==============================] - 0s 332us/step - loss: 0.1120 - mean_squared_error: 0.1120
Epoch 11/30
200/200 [==============================] - 0s 333us/step - loss: 0.1096 - mean_squared_error: 0.1096
Epoch 12/30
200/200 [==============================] - 0s 334us/step - loss: 0.1074 - mean_squared_error: 0.1074
Epoch 13/30
200/200 [==============================] - 0s 333us/step - loss: 0.1053 - mean_squared_error: 0.1053
Epoch 14/30
200/200 [==============================] - 0s 334us/step - loss: 0.1034 - mean_squared_error: 0.1034
Epoch 15/30
200/200 [==============================] - 0s 335us/step - loss: 0.1017 - mean_squared_error: 0.1017
Epoch 16/30
200/200 [==============================] - 0s 334us/step - loss: 0.1001 - mean_squared_error: 0.1001
Epoch 17/30
200/200 [==============================] - 0s 334us/step - loss: 0.0987 - mean_squared_error: 0.0987
Epoch 18/30
200/200 [==============================] - 0s 334us/step - loss: 0.0973 - mean_squared_error: 0.0973
Epoch 19/30
200/200 [==============================] - 0s 333us/step - loss: 0.0961 - mean_squared_error: 0.0961
Epoch 20/30
200/200 [==============================] - 0s 334us/step - loss: 0.0949 - mean_squared_error: 0.0949  
Epoch 21/30
200/200 [==============================] - 0s 333us/step - loss: 0.0939 - mean_squared_error: 0.0939  
Epoch 22/30
200/200 [==============================] - 0s 334us/step - loss: 0.0929 - mean_squared_error: 0.0929  
Epoch 23/30
200/200 [==============================] - 0s 332us/step - loss: 0.0920 - mean_squared_error: 0.0920
Epoch 24/30
200/200 [==============================] - 0s 334us/step - loss: 0.0912 - mean_squared_error: 0.0912
Epoch 25/30
200/200 [==============================] - 0s 333us/step - loss: 0.0905 - mean_squared_error: 0.0905
Epoch 26/30
200/200 [==============================] - 0s 332us/step - loss: 0.0898 - mean_squared_error: 0.0898
Epoch 27/30
200/200 [==============================] - 0s 333us/step - loss: 0.0891 - mean_squared_error: 0.0891
Epoch 28/30
200/200 [==============================] - 0s 333us/step - loss: 0.0885 - mean_squared_error: 0.0885
Epoch 29/30
200/200 [==============================] - 0s 333us/step - loss: 0.0880 - mean_squared_error: 0.0880
Epoch 30/30
200/200 [==============================] - 0s 335us/step - loss: 0.0875 - mean_squared_error: 0.0875
Linear regression model is trained to have weight w: 3.64, b: 0.69
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末用含,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子帮匾,更是在濱河造成了極大的恐慌啄骇,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瘟斜,死亡現(xiàn)場離奇詭異缸夹,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)螺句,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門虽惭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蛇尚,你說我怎么就攤上這事芽唇。” “怎么了取劫?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵匆笤,是天一觀的道長。 經(jīng)常有香客問我勇凭,道長疚膊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任虾标,我火速辦了婚禮寓盗,結(jié)果婚禮上灌砖,老公的妹妹穿的比我還像新娘。我一直安慰自己傀蚌,他們只是感情好基显,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著善炫,像睡著了一般撩幽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上箩艺,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天窜醉,我揣著相機(jī)與錄音,去河邊找鬼艺谆。 笑死榨惰,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的静汤。 我是一名探鬼主播琅催,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼虫给!你這毒婦竟也來了藤抡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤抹估,失蹤者是張志新(化名)和其女友劉穎缠黍,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體药蜻,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡嫁佳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了谷暮。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡盛垦,死狀恐怖湿弦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情腾夯,我是刑警寧澤颊埃,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站蝶俱,受9級特大地震影響班利,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜榨呆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一罗标、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦闯割、人聲如沸彻消。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宾尚。三九已至,卻和暖如春谢澈,著一層夾襖步出監(jiān)牢的瞬間煌贴,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工锥忿, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留牛郑,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓缎谷,卻偏偏與公主長得像井濒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子列林,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353