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ū)和廣泛共享的資源 |
參考資料
- 討論qq群630011153 144081101
- 本文最新版本地址
- 本文涉及的python測試開發(fā)庫 謝謝點(diǎn)贊阔涉!
- 本文相關(guān)海量書籍下載
- 2018最佳人工智能機(jī)器學(xué)習(xí)工具書及下載(持續(xù)更新)
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)
讓我們嘗試使用簡單的線性回歸
代碼: https://github.com/china-testing/python-api-tesing/blob/master/practices/keras/linear.py
訓(xùn)練數(shù)據(jù)后在张,輸出應(yīng)如下所示
執(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