DL框架之Keras:深度学习框架Keras框架的简介、安装(Python库)、相关概念、Keras模型使用、使用方法之详细攻略
DL框架之Keras:深度學(xué)習(xí)框架Keras框架的簡(jiǎn)介、安裝(Python庫(kù))、相關(guān)概念、Keras模型使用、使用方法之詳細(xì)攻略
?
?
?
?
目錄
Keras的簡(jiǎn)介
1、Keras的特點(diǎn)
2、Keras四大特性
3、Keras的用戶體驗(yàn)
4、如果你有如下需求,請(qǐng)選擇Keras
5、Keras支持多后端和多平臺(tái)
Keras的安裝
Keras的使用方法
1、The Sequential Model 序列模型
2、The functional API?函數(shù)式API
3、Model subclassing?模型子類化
其他概念
1、shape
2、回調(diào)
3、保存和恢復(fù)
4、動(dòng)態(tài)圖機(jī)制:Eager Execution
Keras的中的模型使用
1、查找使用方法
2、Keras的?6 種預(yù)訓(xùn)練模型?
3、Keras深度學(xué)習(xí)框架的注意事項(xiàng)(自動(dòng)下載存放路徑等)、使用方法之詳細(xì)攻略
?
?
?
相關(guān)文章
DL框架之Keras:Python庫(kù)之Keras庫(kù)的簡(jiǎn)介、安裝、使用方法詳細(xì)攻略
keras-yolo3:python庫(kù)之keras-yolo3的簡(jiǎn)介、安裝、使用方法詳細(xì)攻略
Keras的簡(jiǎn)介
? ? ?Keras是TensorFlow官方的高層API。Keras是一個(gè)高層神經(jīng)網(wǎng)絡(luò)API,并對(duì)TensorFlow等有較好的優(yōu)化。,Keras由純Python編寫(xiě)而成并基Tensorflow、Theano以及CNTK后端,也就是Keras基于什么東西來(lái)做運(yùn)算。Keras 為支持快速實(shí)驗(yàn)而生,能夠把你的idea迅速轉(zhuǎn)換為結(jié)果。
1、Keras的特點(diǎn)
- tensorflow.keras(tf.keras) module
- Part of core TensorFlow since v1.4
- Full Keras API
- 針對(duì)TF更好的優(yōu)化
- 與TF特別功能更好的整合,Estimator API、Eager execution
2、Keras四大特性
- 1、用戶友好:Keras是為人類而非機(jī)器設(shè)計(jì)的API。用戶的使用體驗(yàn)始終是我們考慮的首要和中心內(nèi)容。Keras遵循減少認(rèn)知困難的最佳實(shí)踐:Keras提供一致而簡(jiǎn)潔的API, 能夠極大減少一般應(yīng)用下用戶的工作量,同時(shí),Keras提供清晰和具有實(shí)踐意義的bug反饋。?
- 2、模塊性:模型可理解為一個(gè)層的序列或數(shù)據(jù)的運(yùn)算圖,完全可配置的模塊可以用最少的代價(jià)自由組合在一起。具體而言,網(wǎng)絡(luò)層、損失函數(shù)、優(yōu)化器、初始化策略、激活函數(shù)、正則化方法都是獨(dú)立的模塊,你可以使用它們來(lái)構(gòu)建自己的模型。?
- 3、易擴(kuò)展性:添加新模塊超級(jí)容易,只需要仿照現(xiàn)有的模塊編寫(xiě)新的類或函數(shù)即可。創(chuàng)建新模塊的便利性使得Keras更適合于先進(jìn)的研究工作。?
- 4、與Python協(xié)作:Keras沒(méi)有單獨(dú)的模型配置文件類型(作為對(duì)比,caffe有),模型由python代碼描述,使其更緊湊和更易debug,并提供了擴(kuò)展的便利性。
?
3、Keras的用戶體驗(yàn)
(1)、Keras是專為人而非機(jī)器設(shè)計(jì)的API
- 它把用戶體驗(yàn)放在首要和中心位置。
- Keras遵循減少認(rèn)知困難的最佳實(shí)踐:它提供一致且簡(jiǎn)單的API,將常見(jiàn)用例所需的用戶操作數(shù)量降至最低,并且在用戶錯(cuò)誤時(shí)提供清晰和可操作的反饋。
(2)、Keras易于學(xué)習(xí)且易于使用
- 作為Keras用戶,可以更高效地工作,讓你比競(jìng)爭(zhēng)對(duì)手更快地嘗試更多創(chuàng)意和幫助你贏得機(jī)器學(xué)習(xí)競(jìng)賽。
(3)、這種易用性不是以降低靈活性為代價(jià)
- Keras與低級(jí)深度學(xué)習(xí)語(yǔ)言(特別是TensorFlow)集成,能夠?qū)崿F(xiàn)可以用基本語(yǔ)言構(gòu)建的任何東西。特別是,作為tf.keras,Keras API與TensorFlow工作流程無(wú)縫集成。
?
4、如果你有如下需求,請(qǐng)選擇Keras
- 簡(jiǎn)易和快速的原型設(shè)計(jì)(keras具有高度模塊化,極簡(jiǎn),和可擴(kuò)充特性)
- 支持CNN和RNN,或二者的結(jié)合
- 無(wú)縫CPU和GPU切換。
?
5、Keras支持多后端和多平臺(tái)
(1)、支持多種語(yǔ)言:Develop in Python, R ? On Unix, Windows, OSX
(2)、支持多個(gè)后端:Keras與TensorFlow&Theano
? ? ?TensorFlow和theano以及Keras都是深度學(xué)習(xí)框架,TensorFlow和theano比較靈活,也比較難學(xué),它們其實(shí)就是一個(gè)微分器 ?Keras其實(shí)就是TensorFlow和Keras的接口(Keras作為前端,TensorFlow或theano作為后端),它也很靈活,且比較容易學(xué)。可以把keras看作為tensorflow封裝后的一個(gè)API。Keras 是一個(gè)用于快速構(gòu)建深度學(xué)習(xí)原型的高級(jí)庫(kù)。我們?cè)趯?shí)踐中發(fā)現(xiàn),它是數(shù)據(jù)科學(xué)家應(yīng)用深度學(xué)習(xí)的好幫手。Keras 目前支持兩種后端框架:TensorFlow 與 Theano,而且 Keras 再過(guò)不久就會(huì)成為 TensorFlow 的默認(rèn) API。
Run the same code with…
- -TensorFlow
- -CNTK
- -Theano
- -MXNet
- -PlaidML
(3)、支持多運(yùn)算平臺(tái):CPU, NVIDIA GPU, AMD GPU, TPU
?
Keras: 基于 Python 的深度學(xué)習(xí)庫(kù)
Keras中文文檔
tensorflow.org/guide/keras
?
?
?
Keras的安裝
pip install Keras
python -m pip install keras
哈哈,大功告成!繼續(xù)學(xué)習(xí)去啦!
pip install --upgrade Kera
190827更新到2.2.5
190827再次還原到2.2.4
相關(guān)文章
Py之keras-resnet:keras-resnet的簡(jiǎn)介、安裝、使用方法之詳細(xì)攻略
?
?
Keras的使用方法
0、三種API方式:The Sequential Model (序列模型)、The functional API (函數(shù)式API)、Model subclassing(模型子類化)
from keras.models import Model from keras.callbacks import ModelCheckpoint from keras.layers import Conv2D, MaxPool2D, Flatten, Dropout, Dense, Input from keras.optimizers import Adam from keras.backend.tensorflow_backend import set_session from keras.utils.vis_utils import model_to_dotimport tensorflow as tf from keras.backend.tensorflow_backend import set_sessionnp.random.seed(5) config = tf.ConfigProto() config.gpu_options.allow_growth=True set_session(tf.Session(config=config))?
1、The Sequential Model 序列模型
-非常簡(jiǎn)單
-僅適用于單輸入,單輸出,順序的層堆疊
-適用于70%以上的用例
| Sequential 序列模型如所示 | |
| 可以簡(jiǎn)單地使用.add() 來(lái)堆疊模型 | |
| 在完成了模型的構(gòu)建后, 可以使用.compile() 來(lái)配置學(xué)習(xí)過(guò)程: | |
| 如果需要,還可以進(jìn)一步地配置優(yōu)化器: | |
| 批量地在訓(xùn)練數(shù)據(jù)上進(jìn)行迭代: | # x_train 和y_train 是Numpy 數(shù)組--就像在Scikit-Learn API 中一樣 或者,可以手動(dòng)地將批次的數(shù)據(jù)提供給模型: |
| 一行代碼就能評(píng)估模型性能: | |
| 對(duì)新的數(shù)據(jù)生成預(yù)測(cè) |
1、快速開(kāi)始序貫(Sequential)模型 ?
序貫?zāi)P褪嵌鄠€(gè)網(wǎng)絡(luò)層的線性堆疊,也就是“一條路走到黑”。 ?
(1)、可以通過(guò)向Sequential模型傳遞一個(gè)layer的list來(lái)構(gòu)造該模型: ?
from keras.models import Sequential?
from keras.layers import Dense, Activation ?
model = Sequential([?Dense(32, units=784),?Activation('relu'),?Dense(10),?Activation('softmax'), ])?
(2)、也可以通過(guò).add()方法一個(gè)個(gè)的將layer加入模型中: ?
model = Sequential() model.add(Dense(32, input_shape=(784,)))?
model.add(Activation('relu'))?
?
?
?
2、The functional API?函數(shù)式API
-象玩樂(lè)高積木
-多輸入,多輸出,任意靜態(tài)圖拓?fù)?br /> -適用于95%的用例
Keras 函數(shù)式API 是定義復(fù)雜模型(如多輸出模型、有向無(wú)環(huán)圖,或具有共享層的模型)的方法。
| 例一:全連接網(wǎng)絡(luò) |
?
3、Model subclassing?模型子類化
-最大的靈活性
-更大的可能錯(cuò)誤面
(1)、通過(guò)對(duì)tf.keras.Model 進(jìn)行子類化并定義你自己的前向傳播來(lái)構(gòu)建完全可自定義的模型。在__init__ 方法中創(chuàng)建層并將它們?cè)O(shè)置為類實(shí)例的屬性。在call 方法中定義前向傳播。
(2)、在啟用Eager Execution 時(shí),模型子類化特別有用,因?yàn)榭梢悦钍降鼐帉?xiě)前向傳播。
(3)、以下示例展示了使用自定義前向傳播進(jìn)行子類化的tf.keras.Model
?
其他概念
1、shape
(1)、指定輸入數(shù)據(jù)的shape ?
模型需要知道輸入數(shù)據(jù)的shape,因此,Sequential的第一層需要接受一個(gè)關(guān)于輸入數(shù)據(jù)shape的參數(shù),后面的各個(gè)層則可以自動(dòng)的推導(dǎo)出中間數(shù)據(jù)的shape,因此不需要為每個(gè)層都指定這個(gè)參數(shù)。
(2)、關(guān)于張量shape ?更多詳細(xì)內(nèi)容參考這個(gè)博客https://blog.csdn.net/u013378306/article/details/56281549
? ?在Keras和Tensorflow中,數(shù)據(jù)是以張量的形式表示的,張量的形狀就是shape。TensorFlow用張量這種數(shù)據(jù)結(jié)構(gòu)來(lái)表示所有的數(shù)據(jù).你可以把一個(gè)張量想象成一個(gè)n維的數(shù)組或列表.一個(gè)張量有一個(gè)靜態(tài)類型和動(dòng)態(tài)類型的維數(shù).張量可以在圖中的節(jié)點(diǎn)之間流通即Flow。
? ?你可以認(rèn)為一個(gè)二階張量就是我們平常所說(shuō)的矩陣,一階張量可以認(rèn)為是一個(gè)向量.對(duì)于一個(gè)二階張量你可以用語(yǔ)句t[i, j]來(lái)訪問(wèn)其中的任何元素.而對(duì)于三階張量你可以用't[i, j, k]'來(lái)訪問(wèn)其中的任何元素.
(1)input_shape就是指輸入張量的shape。例如 input_dim=784,說(shuō)明輸入是一個(gè)784維的向量,這相當(dāng)于一個(gè)一階的張量,它的shape就是(784,)
2、回調(diào)
1、回調(diào)是傳遞給模型的對(duì)象,用于在訓(xùn)練期間自定義該模型并擴(kuò)展其行為。你可以編寫(xiě)自定義回調(diào),也可以使用包含以下方法的內(nèi)置tf.keras.callbacks:
tf.keras.callbacks.ModelCheckpoint '定期保存模型的檢查點(diǎn)。' tf.keras.callbacks.LearningRateScheduler '動(dòng)態(tài)更改學(xué)習(xí)速率。' tf.keras.callbacks.EarlyStopping '在驗(yàn)證效果不再改進(jìn)時(shí)中斷訓(xùn)練。' tf.keras.callbacks.TensorBoard '使用TensorBoard 監(jiān)控模型的行為。'2、要使用tf.keras.callbacks.Callback,請(qǐng)將其傳遞給模型的fit 方法:
callbacks = [# Interrupt training if `val_loss` stops improving for over 2 epochstf.keras.callbacks.EarlyStopping(patience=2, monitor='val_loss'),# Write TensorBoard logs to `./logs` directorytf.keras.callbacks.TensorBoard(log_dir='./logs')] model.fit(data, labels, batch_size=32, epochs=5, callbacks=callbacks,validation_data=(val_data, val_labels))3、保存和恢復(fù)
(1)僅限權(quán)重:使用tf.keras.Model.save_weights 保存并加載模型的權(quán)重
model = tf.keras.Sequential([layers.Dense(64, activation='relu'),layers.Dense(10, activation='softmax')]) model.compile(optimizer=tf.train.AdamOptimizer(0.001),loss='categorical_crossentropy',metrics=['accuracy'])'默認(rèn)情況下,會(huì)以TensorFlow 檢查點(diǎn)文件格式保存模型的權(quán)重' # Save weights to a TensorFlow Checkpoint file model.save_weights('./weights/my_model') # Restore the model's state,# this requires a model with the same architecture. model.load_weights('./weights/my_model')'權(quán)重也可以另存為KerasHDF5 格式(Keras多后端實(shí)現(xiàn)的默認(rèn)格式)' # Save weights to a HDF5 filemodel.save_weights('my_model.h5', save_format='h5') # Restore the model's statemodel. load_weights('my_model.h5')(2)、僅限配置:可以保存模型的配置,此操作會(huì)對(duì)模型架構(gòu)(不含任何權(quán)重)進(jìn)行序列化。即使沒(méi)有定義原始模型的代碼,保存的配置也可以重新創(chuàng)建并初始化相同的模型。Keras 支持JSON 和YAML 序列化格式:
# Serialize a model to JSON format json_string = model.to_json() json_string import json import pprint pprint.pprint(json.loads(json_string))'從json重新創(chuàng)建模型' fresh_model = tf.keras.models.model_from_json(json_string)(3)整個(gè)模型:整個(gè)模型可以保存到一個(gè)文件中,其中包含權(quán)重值、模型配置乃至優(yōu)化器配置。這樣,您就可以對(duì)模型設(shè)置檢查點(diǎn)并稍后從完全相同的狀態(tài)繼續(xù)訓(xùn)練,而無(wú)需訪問(wèn)原始代碼。
# Create a trivial model model = tf.keras.Sequential([layers.Dense(10, activation='softmax', input_shape=(32,)),layers.Dense(10, activation='softmax')]) model.compile(optimizer='rmsprop',loss='categorical_crossentropy',metrics=['accuracy']) model.fit(data, labels, batch_size=32, epochs=5) # Save entire model to a HDF5 file model.save('my_model.h5')# Recreate the exact same model, including weights and optimizer. model = tf.keras.models.load_model('my_model.h5')?
4、動(dòng)態(tài)圖機(jī)制:Eager Execution
? ? ? 不同于TensorFlow的靜態(tài)機(jī)制。
- Eager Execution 是一種命令式編程環(huán)境,可立即評(píng)估操作。此環(huán)境對(duì)于Keras 并不是必需的,但是受tf.keras 的支持,并且可用于檢查程序和調(diào)試。
- 所有tf.keras 模型構(gòu)建API 都與Eager Execution 兼容。雖然可以使用Sequential 和函數(shù)式API,但Eager Execution 對(duì)模型子類化和構(gòu)建自定義層特別有用。
- 與通過(guò)組合現(xiàn)有層來(lái)創(chuàng)建模型的API 不同,函數(shù)式API 要求你編寫(xiě)前向傳播代碼。
?
?
?
?
Keras的中的模型使用
1、查找使用方法
from keras.models import Sequential
model = Sequential()
help(model.compile)
(1)、model.compile()函數(shù),用來(lái)配置訓(xùn)練模型參數(shù),可以指定你設(shè)想的隨機(jī)梯度下降中的網(wǎng)絡(luò)的損失函數(shù)、優(yōu)化方式等參數(shù)(2)、model.summary()函數(shù),Prints a string summary of the network.
(3)、model.fit_generator()函數(shù),Fits the model on data generated batch-by-batch by a Python generator.The generator is run in parallel to the model, for efficiency.For instance, this allows you to do real-time data augmentation on images on CPU in parallel to training your model on GPU.
(4)、K.placeholder() ? ?#用于得到傳遞進(jìn)來(lái)的真實(shí)的訓(xùn)練樣本
?
2、Keras的?6 種預(yù)訓(xùn)練模型?
? ? ? 目前可知,Keras 已經(jīng)將這 6 種預(yù)訓(xùn)練模型集成到了庫(kù)中: VGG16、VGG19、ResNet50、Inception v3、Xception、MobileNet。VGG 網(wǎng)絡(luò)以及從 2012 年以來(lái)的 AlexNet 都遵循現(xiàn)在的基本卷積網(wǎng)絡(luò)的原型布局:一系列卷積層、最大池化層和激活層,最后還有一些全連接的分類層。MobileNet 本質(zhì)上是為移動(dòng)應(yīng)用優(yōu)化后的 Xception 架構(gòu)的流線型(streamline)版本。
?
3、Keras深度學(xué)習(xí)框架的注意事項(xiàng)(自動(dòng)下載存放路徑等)、使用方法之詳細(xì)攻略
DL之Keras: Keras深度學(xué)習(xí)框架的注意事項(xiàng)(自動(dòng)下載存放路徑等)、使用方法之詳細(xì)攻略
?
?
?
總結(jié)
以上是生活随笔為你收集整理的DL框架之Keras:深度学习框架Keras框架的简介、安装(Python库)、相关概念、Keras模型使用、使用方法之详细攻略的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: CV:利用cv2+dlib库自带fron
- 下一篇: Py之scikit-learn:机器学习