成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

keras中最常用深度學習的API

人工智能 深度學習
眾所周知,利用Keras-Python庫可以快速、輕松地創建屬于自己的深度學習的模型,今天我們就來介紹一些我們常用的API函數。

[[208000]]

眾所周知,利用Keras-Python庫可以快速、輕松地創建屬于自己的深度學習的模型,今天我們就來介紹一些我們常用的API函數。

序貫模型(Sequential)API允許你為大多數問題逐層的創建模型。它的局限性在于它不允許你創建共享層或者是具有多個輸入或輸出的模型。

Keras中的API函數是創建更多靈活性模型的替代方法,其中也包括創建更復雜的模型。

在本篇博客中,你將發現如何在Keras中使用靈活的API函數來定義深度學習模型。

閱讀完成后,你將知道:

  1. 連續的API和API函數之間的區別。
  2. 如何使用API函數定義簡單的多層感知器,卷積神經網絡和循環神經網絡模型。
  3. 如何使用共享層和多個輸入和輸出定義更復雜的模型。

OK,讓我們開始吧。

教程概述

本教程分為6部分:

  1. Keras序貫模型。
  2. Keras功能函數模型。
  3. 標準網絡模型。
  4. 共享層模型。
  5. 多個輸入和輸出模型。
  6. ***練習。

1.Keras序貫模型

Keras提供了一個Sequential模型的API。

這是創建深度學習模型的一種方法,其中創建了Sequential類的實例,并創建了模型圖層并將其添加其中。

例如,可以將層定義并傳遞給Sequential作為數組:

  1. from keras.models import Sequential 
  2.  
  3. from keras.layers import Dense 
  4.  
  5. model = Sequential([Dense(2, input_dim=1), Dense(1)])  

層也可以分段添加:

  1. from keras.models import Sequential 
  2.  
  3. from keras.layers import Dense 
  4.  
  5. model = Sequential() 
  6.  
  7. model.add(Dense(2, input_dim=1)) 
  8.  
  9. model.add(Dense(1))  

序貫模型的API在大多數情況下非常適合開發深度學習模型,但也有一些限制。例如,它不能定義具有多個不同輸入源的模型,因為那樣會產生多個輸出目標。

2.Keras功能函數模型

Keras功能API為定義模型提供了更靈活的方式。

它允許你定義多個輸入或輸出的模型以及可以共享圖層的模型。除此之外,它還允許你定義臨時的非循環網絡圖。

模型通過創建層的實例并將它們直接彼此成對連接來定義,然后定義一個模型,該模型的指定層作為模型的輸入和輸出。

我們來看看Keras功能API的三個獨特方面:

2.1定義輸入

與Sequential模型不同,你必須創建并定義一個獨立的輸入層,該層指定輸入數據的形狀。

輸入層采用一個模型參數,它是一個代表輸入數據維度的元組。

當輸入數據為一維時,例如對于多層感知器,該模型必須明確留出在訓練網絡分割數據時所使用的小批量大小的形狀。因此,模型元組始終以掛起的***一維(2)定義,例如:

  1. from keras.layers import Input 
  2.  
  3. visible = Input(shape=(2,))  

2.2連接層

模型中的層可以成對連接,這是通過在定義每個新圖層時指定輸入來自哪里。使用括號符號,使得在創建圖層之后,指定從當前圖層的輸入到即將到達的圖層。

讓我們用一個簡單的例子來說明這一點。我們可以創建如上所述的輸入層,然后創建一個隱藏層,作為僅從輸入層接收輸入的密集層。

  1. from keras.layers import Input 
  2.  
  3. from keras.layers import Dense 
  4.  
  5. visible = Input(shape=(2,)) 
  6.  
  7. hidden = Dense(2)(visible)  

正是通過這種連接層的方法,使功能API更具有靈活性。你可以看到開始定義ad-hoc圖層的特殊圖形變得多么的容易。

2.3創建模型

創建模型所需的所有圖層并將其連接在一起后,接下來必須定義模型。與Sequential API一樣,該模型是你可以概述、擬合、評估和使用做出預測。

Keras提供了一個Model類,你可以使用它從創建的圖層時創建模型。它要求你需要指定輸入和輸出層。例如:

  1. from keras.models import Model 
  2.  
  3. from keras.layers import Input 
  4.  
  5. from keras.layers import Dense 
  6.  
  7. visible = Input(shape=(2,)) 
  8.  
  9. hidden = Dense(2)(visible) 
  10.  
  11. model = Model(inputs=visible, outputs=hidden)  

既然現在我們知道了Keras功能API的所有關鍵部分,我們通過定義一套不同的模型實踐一下我們的學習成果。

以下每個示例都是可執行的,并打印結構并創建圖表。我建議為你自己的模型做這個,這樣可以讓你清楚你的定義。

我希望這些示例可以為你在以后使用功能API定義自己的模型時提供了模板。

3.標準網絡模型

當開始使用功能API時,***先了解一些關于標準神經網絡模型的定義。在本節中,我們將介紹定義一個簡單的多層感知器,卷積神經網絡和循環神經網絡。

這些例子將為以后理解更詳細的例子奠定基礎。

3.1多層感知器

在本節中,我們為二進制分類定義了一個多層Perceptron模型。該模型有10個輸入,3個隱藏層,10個神經元,輸出層有1個輸出。在每個隱藏層中使用整流線性激活函數,在輸出層使用S形激活函數進行二進制分類。

  1. # Multilayer Perceptron 
  2.  
  3. from keras.utils import plot_model 
  4.  
  5. from keras.models import Model 
  6.  
  7. from keras.layers import Input 
  8.  
  9. from keras.layers import Dense 
  10.  
  11. visible = Input(shape=(10,)) 
  12.  
  13. hidden1 = Dense(10, activation='relu')(visible) 
  14.  
  15. hidden2 = Dense(20, activation='relu')(hidden1) 
  16.  
  17. hidden3 = Dense(10, activation='relu')(hidden2) 
  18.  
  19. output = Dense(1, activation='sigmoid')(hidden3) 
  20.  
  21. model = Model(inputs=visible, outputs=output
  22.  
  23. # summarize layers 
  24.  
  25. print(model.summary()) 
  26.  
  27. # plot graph 
  28.  
  29. plot_model(model, to_file='multilayer_perceptron_graph.png' 

運行示例打印網絡的結構:

  1. _________________________________________________________________ 
  2. Layer (type)                 Output Shape              Param # 
  3. ================================================================= 
  4. input_1 (InputLayer)         (None, 10)                0 
  5. _________________________________________________________________ 
  6. dense_1 (Dense)              (None, 10)                110 
  7. _________________________________________________________________ 
  8. dense_2 (Dense)              (None, 20)                220 
  9. _________________________________________________________________ 
  10. dense_3 (Dense)              (None, 10)                210 
  11. _________________________________________________________________ 
  12. dense_4 (Dense)              (None, 1)                 11 
  13. ================================================================= 
  14. Total params: 551 
  15. Trainable params: 551 
  16. Non-trainable params: 0 
  17. _________________________________________________________________  

模型圖的創建并保存到文件:

 

3.2卷積神經網絡

在本節中,我們將定義一個用于圖像分類的卷積神經網絡。

該模型接收黑白64×64圖像作為輸入,然后兩個卷積層和匯集層的序列作為特征提取器,隨后是完全連接的層來解釋特征,并且輸出層是具有S形激活函數。

  1. # Convolutional Neural Network 
  2.  
  3. from keras.utils import plot_model 
  4.  
  5. from keras.models import Model 
  6.  
  7. from keras.layers import Input 
  8.  
  9. from keras.layers import Dense 
  10.  
  11. from keras.layers.convolutional import Conv2D 
  12.  
  13. from keras.layers.pooling import MaxPooling2D 
  14.  
  15. visible = Input(shape=(64,64,1)) 
  16.  
  17. conv1 = Conv2D(32, kernel_size=4, activation='relu')(visible) 
  18.  
  19. pool1 = MaxPooling2D(pool_size=(2, 2))(conv1) 
  20.  
  21. conv2 = Conv2D(16, kernel_size=4, activation='relu')(pool1) 
  22.  
  23. pool2 = MaxPooling2D(pool_size=(2, 2))(conv2) 
  24.  
  25. hidden1 = Dense(10, activation='relu')(pool2) 
  26.  
  27. output = Dense(1, activation='sigmoid')(hidden1) 
  28.  
  29. model = Model(inputs=visible, outputs=output
  30.  
  31. # summarize layers 
  32.  
  33. print(model.summary()) 
  34.  
  35. # plot graph 
  36.  
  37. plot_model(model, to_file='convolutional_neural_network.png' 

運行示例:

  1. _________________________________________________________________ 
  2.  
  3. Layer (type) Output Shape Param # 
  4.  
  5. ================================================================= 
  6.  
  7. input_1 (InputLayer) (None, 64, 64, 1) 0 
  8.  
  9. •••••• 
  10.  
  11. Total params: 8,933 
  12.  
  13. Trainable params: 8,933 
  14.  
  15. Non-trainable params: 0 
  16.  
  17. ________________________________________________________________  

模型圖的圖創建并保存到文件:

 

3.3循環神經網絡

在本節中,我們將定義一個LSTM循環神經網絡用于序列分類。

該模型是100個時間步長作為輸入,該模型具有單個LSTM隱藏層,用于從序列中提取特征,然后是完全連接的層以解釋LSTM輸出,隨后是用于進行二進制預測的輸出層。

  1. # Recurrent Neural Network 
  2.  
  3. from keras.utils import plot_model 
  4.  
  5. from keras.models import Model 
  6.  
  7. from keras.layers import Input 
  8.  
  9. from keras.layers import Dense 
  10.  
  11. from keras.layers.recurrent import LSTM 
  12.  
  13. visible = Input(shape=(100,1)) 
  14.  
  15. hidden1 = LSTM(10)(visible) 
  16.  
  17. hidden2 = Dense(10, activation='relu')(hidden1) 
  18.  
  19. output = Dense(1, activation='sigmoid')(hidden2) 
  20.  
  21. model = Model(inputs=visible, outputs=output
  22.  
  23. # summarize layers 
  24.  
  25. print(model.summary()) 
  26.  
  27. # plot graph 
  28.  
  29. plot_model(model, to_file='recurrent_neural_network.png' 

運行示例總結模型層。

  1. _________________________________________________________________ 
  2.  
  3. Layer (type) Output Shape Param # 
  4.  
  5. ================================================================= 
  6.  
  7. ••••••• 
  8.  
  9. ================================================================= 
  10.  
  11. Total params: 601 
  12.  
  13. Trainable params: 601 
  14.  
  15. Non-trainable params: 0 
  16.  
  17. _________________________________________________________________  

模型圖的創建并保存到文件:

 

4.共享層模型

多層可以共享一層的輸出。

例如,可能存在來自輸入的多個不同的特征提取層,或者用于解釋特征提取層輸出的多個層。

我們來看看這兩個例子。

4.1共享輸入層

在本節中,我們使用不同大小的內核定義多個卷積層來解釋圖像輸入。

該模型輸入采用大小為64×64像素的黑白圖像。有兩個CNN特征提取子模型共享該輸入:***個內核大小為4,第二個內核大小為8。這些特征提取子模型的輸出被平坦化為向量,并連接成一個長向量,并傳遞到完全連接的層,以便在最終輸出層之前進行二進制分類。

  1. # Shared Input Layer 
  2.  
  3. from keras.utils import plot_model 
  4.  
  5. from keras.models import Model 
  6.  
  7. from keras.layers import Input 
  8.  
  9. from keras.layers import Dense 
  10.  
  11. from keras.layers import Flatten 
  12.  
  13. from keras.layers.convolutional import Conv2D 
  14.  
  15. from keras.layers.pooling import MaxPooling2D 
  16.  
  17. from keras.layers.merge import concatenate 
  18.  
  19. # input layer 
  20.  
  21. visible = Input(shape=(64,64,1)) 
  22.  
  23. first feature extractor 
  24.  
  25. conv1 = Conv2D(32, kernel_size=4, activation='relu')(visible) 
  26.  
  27. pool1 = MaxPooling2D(pool_size=(2, 2))(conv1) 
  28.  
  29. flat1 = Flatten()(pool1) 
  30.  
  31. second feature extractor 
  32.  
  33. conv2 = Conv2D(16, kernel_size=8, activation='relu')(visible) 
  34.  
  35. pool2 = MaxPooling2D(pool_size=(2, 2))(conv2) 
  36.  
  37. flat2 = Flatten()(pool2) 
  38.  
  39. # merge feature extractors 
  40.  
  41. merge = concatenate([flat1, flat2]) 
  42.  
  43. # interpretation layer 
  44.  
  45. hidden1 = Dense(10, activation='relu')(merge) 
  46.  
  47. # prediction output 
  48.  
  49. output = Dense(1, activation='sigmoid')(hidden1) 
  50.  
  51. model = Model(inputs=visible, outputs=output
  52.  
  53. # summarize layers 
  54.  
  55. print(model.summary()) 
  56.  
  57. # plot graph 
  58.  
  59. plot_model(model, to_file='shared_input_layer.png' 

運行示例總結模型層。

  1. ___________________________________________________________________ 
  2.  
  3. Layer (type) Output Shape Param # Connected to 
  4.  
  5. =================================================================== 
  6.  
  7. ••••••••••••••••••••••• 
  8.  
  9. Total params: 415,045 
  10.  
  11. Trainable params: 415,045 
  12.  
  13. Non-trainable params: 0 
  14.  
  15. ___________________________________________________________________  

模型圖的被創建并保存到文件:

 

4.2共享特征提取層

在本節中,我們使用兩個并行子模型解釋LSTM特征提取器的輸出以進行序列分類。

模型的輸入是一個特征為100的時間步長,具有10個存儲單元的LSTM層解釋該序列。***種解釋模式是淺層的單層完全連接層,第二種是深層的3層模型。兩個解釋模型的輸出都被連接成一個長向量,傳遞給用于進行二進制預測的輸出層。

  1. # Shared Feature Extraction Layer 
  2.  
  3. from keras.utils import plot_model 
  4.  
  5. from keras.models import Model 
  6.  
  7. from keras.layers import Input 
  8.  
  9. from keras.layers import Dense 
  10.  
  11. from keras.layers.recurrent import LSTM 
  12.  
  13. from keras.layers.merge import concatenate 
  14.  
  15. # define input 
  16.  
  17. visible = Input(shape=(100,1)) 
  18.  
  19. # feature extraction 
  20.  
  21. extract1 = LSTM(10)(visible) 
  22.  
  23. first interpretation model 
  24.  
  25. interp1 = Dense(10, activation='relu')(extract1) 
  26.  
  27. second interpretation model 
  28.  
  29. interp11 = Dense(10, activation='relu')(extract1) 
  30.  
  31. interp12 = Dense(20, activation='relu')(interp11) 
  32.  
  33. interp13 = Dense(10, activation='relu')(interp12) 
  34.  
  35. # merge interpretation 
  36.  
  37. merge = concatenate([interp1, interp13]) 
  38.  
  39. output 
  40.  
  41. output = Dense(1, activation='sigmoid')(merge) 
  42.  
  43. model = Model(inputs=visible, outputs=output
  44.  
  45. # summarize layers 
  46.  
  47. print(model.summary()) 
  48.  
  49. # plot graph 
  50.  
  51. plot_model(model, to_file='shared_feature_extractor.png' 

運行示例總結模型層。

  1. ___________________________________________________________________ 
  2.  
  3. Layer (type) Output Shape Param # Connected to 
  4.  
  5. ••••••• 
  6.  
  7. Total params: 1,151 
  8.  
  9. Trainable params: 1,151 
  10.  
  11. Non-trainable params: 0 
  12.  
  13. ___________________________________________________________________  

模型圖被創建并保存到文件。

 

5.多個輸入和輸出模型

功能API也可用于開發具有多個輸入的更復雜的模型,可能具有不同的模態。它也可以用于開發產生多個輸出的模型。

我們將在本節中查看每個示例。

5.1多輸入模型

我們將開發一個圖像分類模型,它將兩個版本的圖像作為輸入,每個版本的大小不同。具體是黑白64×64版,彩色32×32版。單獨的特征提取CNN模型在每個模型上運行,然后將兩個模型的結果連接起來進行解釋和最終預測。

請注意,在創建Model()實例時,我們將兩個輸入圖層定義為數組。

  1. model = Model(inputs=[visible1, visible2], outputs=output

完整的示例如下所示。

  1. # Multiple Inputs 
  2.  
  3. from keras.utils import plot_model 
  4.  
  5. from keras.models import Model 
  6.  
  7. from keras.layers import Input 
  8.  
  9. from keras.layers import Dense 
  10.  
  11. from keras.layers import Flatten 
  12.  
  13. from keras.layers.convolutional import Conv2D 
  14.  
  15. from keras.layers.pooling import MaxPooling2D 
  16.  
  17. from keras.layers.merge import concatenate 
  18.  
  19. first input model 
  20.  
  21. visible1 = Input(shape=(64,64,1)) 
  22.  
  23. conv11 = Conv2D(32, kernel_size=4, activation='relu')(visible1) 
  24.  
  25. pool11 = MaxPooling2D(pool_size=(2, 2))(conv11) 
  26.  
  27. conv12 = Conv2D(16, kernel_size=4, activation='relu')(pool11) 
  28.  
  29. pool12 = MaxPooling2D(pool_size=(2, 2))(conv12) 
  30.  
  31. flat1 = Flatten()(pool12) 
  32.  
  33. second input model 
  34.  
  35. visible2 = Input(shape=(32,32,3)) 
  36.  
  37. conv21 = Conv2D(32, kernel_size=4, activation='relu')(visible2) 
  38.  
  39. pool21 = MaxPooling2D(pool_size=(2, 2))(conv21) 
  40.  
  41. conv22 = Conv2D(16, kernel_size=4, activation='relu')(pool21) 
  42.  
  43. pool22 = MaxPooling2D(pool_size=(2, 2))(conv22) 
  44.  
  45. flat2 = Flatten()(pool22) 
  46.  
  47. # merge input models 
  48.  
  49. merge = concatenate([flat1, flat2]) 
  50.  
  51. # interpretation model 
  52.  
  53. hidden1 = Dense(10, activation='relu')(merge) 
  54.  
  55. hidden2 = Dense(10, activation='relu')(hidden1) 
  56.  
  57. output = Dense(1, activation='sigmoid')(hidden2) 
  58.  
  59. model = Model(inputs=[visible1, visible2], outputs=output
  60.  
  61. # summarize layers 
  62.  
  63. print(model.summary()) 
  64.  
  65. # plot graph 
  66.  
  67. plot_model(model, to_file='multiple_inputs.png' 

運行示例:

  1. ___________________________________________________________________ 
  2.  
  3. Layer (type) Output Shape Param # Connected to 
  4.  
  5. ••••••••• 
  6.  
  7. input_1 (InputLayer) (None, 64, 64, 1) 0 
  8.  
  9. Total params: 49,699 
  10.  
  11. Trainable params: 49,699 
  12.  
  13. Non-trainable params: 0 
  14.  
  15. ___________________________________________________________________  

模型圖被創建并保存到文件。

 

5.2多輸出模型

在本節中,我們將開發出一種可以進行兩種不同類型預測的模型。給定一個特征的100個時間步長的輸入序列,該模型將對序列進行分類并輸出具有相同長度的新序列。

LSTM層解釋輸入序列,并返回每個時間步長的隱藏狀態。***個輸出模型創建一個堆棧的LSTM,解釋特征,并進行二進制預測。第二個輸出模型使用相同的輸出層對每個輸入時間步長進行實值預測。

  1. # Multiple Outputs 
  2.  
  3. from keras.utils import plot_model 
  4.  
  5. from keras.models import Model 
  6.  
  7. from keras.layers import Input 
  8.  
  9. from keras.layers import Dense 
  10.  
  11. from keras.layers.recurrent import LSTM 
  12.  
  13. from keras.layers.wrappers import TimeDistributed 
  14.  
  15. # input layer 
  16.  
  17. visible = Input(shape=(100,1)) 
  18.  
  19. # feature extraction 
  20.  
  21. extract = LSTM(10, return_sequences=True)(visible) 
  22.  
  23. # classification output 
  24.  
  25. class11 = LSTM(10)(extract) 
  26.  
  27. class12 = Dense(10, activation='relu')(class11) 
  28.  
  29. output1 = Dense(1, activation='sigmoid')(class12) 
  30.  
  31. sequence output 
  32.  
  33. output2 = TimeDistributed(Dense(1, activation='linear'))(extract) 
  34.  
  35. output 
  36.  
  37. model = Model(inputs=visible, outputs=[output1, output2]) 
  38.  
  39. # summarize layers 
  40.  
  41. print(model.summary()) 
  42.  
  43. # plot graph 
  44.  
  45. plot_model(model, to_file='multiple_outputs.png' 

運行示例。

  1. ___________________________________________________________________ 
  2.  
  3. Layer (type) Output Shape Param # Connected to 
  4.  
  5. =================================================================== 
  6.  
  7. input_1 (InputLayer) (None, 100, 1) 0 
  8.  
  9. ___________________________________________________________________ 
  10.  
  11. ········ 
  12.  
  13. Total params: 1,452 
  14.  
  15. Trainable params: 1,452 
  16.  
  17. Non-trainable params: 0 
  18.  
  19. ___________________________________________________________________  

模型圖的創建并保存到文件:

 

 

6.***做法

在本節中,我給你一些提示,以便在定義自己的模型時充分利用功能性API。

  1. 一致的變量名。對輸入(可見)和輸出層(輸出)使用相同的變量名稱,甚至可以使用隱藏層(hidden1,hidden2)。它將有助于正確地將事物聯系起來。
  2. 查看圖層圖。始終打印模型摘要并查看圖層輸出,以確保模型按預期連接在一起。
  3. 查看圖表。創建一個模型圖的情節,并檢查它,以確保所有的東西都按照你的意圖放在一起。
  4. 命名圖層。你可以為查看模型圖的名稱和繪圖時使用的圖層分配名稱。例如:Dense(1,name =’hidden1’)。
  5. 單獨的子模型。考慮分開子模型的發展,并將子模型結合在一起。 
責任編輯:龐桂玉 來源: 36大數據
相關推薦

2021-02-03 13:56:09

KerasAPI深度學習

2022-10-14 13:47:06

2009-06-10 21:58:51

Javascript常

2024-02-26 00:00:00

stage函數進度

2025-04-25 07:10:00

GenAIAI工具人工智能

2024-12-11 08:20:57

設計模式源碼

2024-01-29 18:02:46

2024-01-24 13:14:00

Python內置函數工具

2017-07-13 10:03:43

優化算法Adam深度學習

2013-08-26 16:23:13

iOS應用標題移動應用標題常用單詞移動應用推廣

2009-04-30 15:26:25

Visual Stud快捷鍵技巧

2024-11-08 13:34:24

2010-08-27 11:17:49

DIVCSS

2024-01-22 13:53:00

Linux環境變量

2025-06-16 08:22:23

2010-01-11 10:53:14

C++Builder

2021-09-16 11:02:49

Python線程

2023-07-08 23:02:14

快捷鍵IntelliJIDEA

2024-02-28 18:01:20

IDEAIDEtry

2010-05-25 09:19:13

MySQL管理工具
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91久久国产综合久久 | 欧美99| 日本中文字幕日韩精品免费 | 久久精品91久久久久久再现 | 一区福利视频 | 综合久久综合久久 | 爱综合 | 91视频一区二区三区 | yiren22综合网成人 | 午夜精品在线观看 | 精品久久久久久 | 久久国产精品免费一区二区三区 | 亚洲伊人精品酒店 | 精品成人免费一区二区在线播放 | 精精国产xxxx视频在线 | www.狠狠干 | 成人精品免费视频 | 久免费视频 | 在线四虎| 久久久精品 | 中文字幕成人免费视频 | 午夜爽爽男女免费观看hd | 亚洲精品免费视频 | 国产免费观看一区 | 精品欧美二区 | 国产在线精品区 | 在线精品一区二区 | 99热这里有精品 | 国产精品久久久久久久7777 | 国产激情视频在线观看 | 国产精品高潮呻吟久久久久 | 国产亚洲精品美女久久久久久久久久 | 99爱在线观看| 亚洲精品第一页 | 精品国产乱码久久久久久老虎 | 日韩影音 | 一区二区精品电影 | jlzzjlzz国产精品久久 | 日韩中文在线视频 | 国产无套一区二区三区久久 | www.奇米|