<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 如何使用 Keras 函數式 API 進行深度學習 > 原文: [https://machinelearningmastery.com/keras-functional-api-deep-learning/](https://machinelearningmastery.com/keras-functional-api-deep-learning/) Keras Python 庫使創建深度學習模型變得快速而簡單。 順序 API 允許您逐層創建模型以解決大多數問題。它的局限性在于它不允許您創建共享層或具有多個輸入或輸出的模型。 Keras 中的功能 API 是創建模型的另一種方式,它提供了更多的靈活性,包括創建更復雜的模型。 在本教程中,您將了解如何使用 Keras 中更靈活的功能 API 來定義深度學習模型。 完成本教程后,您將了解: * Sequential 和 Functional API 之間的區別。 * 如何使用功能 API 定義簡單的多層感知器,卷積神經網絡和遞歸神經網絡模型。 * 如何使用共享層和多個輸入和輸出定義更復雜的模型。 讓我們開始吧。 * **2017 年 11 月更新**:更新關于僅影響 1D 輸入的輸入層懸掛尺寸的注釋,感謝 Joe。 * **更新了 Nov / 2018** :為 CNN 添加了缺失的展平層,感謝 Konstantin。 * **更新 Nov / 2018** :添加了功能 API Python 語法的描述。 ## 教程概述 本教程分為 7 個部分;他們是: 1. Keras 順序模型 2. Keras 功能模型 3. 標準網絡模型 4. 共享層模型 5. 多種輸入和輸出模型 6. 最佳實踐 7. **NEW** :關于 Functional API Python 語法的注釋 ## 1\. Keras 順序模型 作為評論,Keras 提供了 Sequential 模型 API。 這是一種創建深度學習模型的方法,其中創建了 Sequential 類的實例并創建了模型層并將其添加到其中。 例如,可以定義層并將其作為數組傳遞給 Sequential: ```py from keras.models import Sequential from keras.layers import Dense model = Sequential([Dense(2, input_dim=1), Dense(1)]) ``` 層也可以分段添加: ```py from keras.models import Sequential from keras.layers import Dense model = Sequential() model.add(Dense(2, input_dim=1)) model.add(Dense(1)) ``` Sequential 模型 API 非常適合在大多數情況下開發深度學習模型,但它也有一些局限性。 例如,定義可能具有多個不同輸入源的模型,生成多個輸出目標或重用層的模型并不簡單。 ## 2\. Keras 功能模型 Keras 功能 API 為定義模型提供了更靈活的方式。 它特別允許您定義多個輸入或輸出模型以及共享層的模型。更重要的是,它允許您定義 ad hoc 非循環網絡圖。 通過創建層實例并將它們成對地直接相互連接來定義模型,然后定義一個模型,該模型指定用作模型輸入和輸出的層。 讓我們依次看看 Keras 功能 API 的三個獨特方面: ### 1.定義輸入 與 Sequential 模型不同,您必須創建并定義一個指定輸入數據形狀的獨立輸入層。 輸入層采用 shape 參數,該參數是指示輸入數據的維度的元組。 當輸入數據是一維的時,例如對于多層感知器,形狀必須明確留出空間,以便在訓練網絡時分割數據時使用的小批量大小的形狀。因此,當輸入是一維(2,)時,形狀元組總是用掛起的最后一個維度定義,例如: ```py from keras.layers import Input visible = Input(shape=(2,)) ``` ### 2.連接層 模型中的層成對連接。 這是通過在定義每個新層時指定輸入的來源來完成的。使用括號表示法,使得在創建層之后,指定從其輸入當前層的層。 讓我們用一個簡短的例子來說明這一點。我們可以像上面那樣創建輸入層,然后創建一個隱藏層作為 Dense,它只接收來自輸入層的輸入。 ```py from keras.layers import Input from keras.layers import Dense visible = Input(shape=(2,)) hidden = Dense(2)(visible) ``` 注意創建 Dense 層之后的(可見),該層將輸入層輸出連接為密集隱藏層的輸入。 正是這種逐層連接層的方式為功能 API 提供了靈活性。例如,您可以看到開始定義層的特殊圖形是多么容易。 ### 3.創建模型 創建所有模型層并將它們連接在一起后,必須定義模型。 與 Sequential API 一樣,模型是您可以匯總,擬合,評估和用于進行預測的模型。 Keras 提供了一個 Model 類,您可以使用它從創建的層創建模型。它要求您只指定輸入和輸出層。例如: ```py from keras.models import Model from keras.layers import Input from keras.layers import Dense visible = Input(shape=(2,)) hidden = Dense(2)(visible) model = Model(inputs=visible, outputs=hidden) ``` 現在我們已經了解了 Keras 功能 API 的所有關鍵部分,讓我們通過定義一套不同的模型并使用它來構建一些實踐。 每個示例都是可執行的,并打印結構并創建圖表。我建議您為自己的模型執行此操作,以明確您已定義的內容。 我希望這些示例在您希望將來使用功能 API 定義自己的模型時為您提供模板。 ## 3.標準網絡模型 在開始使用功能 API 時,最好先了解一些標準神經網絡模型的定義。 在本節中,我們將研究定義一個簡單的多層感知器,卷積神經網絡和遞歸神經網絡。 這些示例將為以后更詳細的示例提供基礎。 ### 多層感知器 在本節中,我們定義了用于二元分類的多層 Perceptron 模型。 該模型具有 10 個輸入,3 個具有 10,20 和 10 個神經元的隱藏層,以及具有 1 個輸出的輸出層。在每個隱藏層中使用校正的線性激活函數,并且在輸出層中使用 S 形激活函數,用于二元分類。 ```py # Multilayer Perceptron from keras.utils import plot_model from keras.models import Model from keras.layers import Input from keras.layers import Dense visible = Input(shape=(10,)) hidden1 = Dense(10, activation='relu')(visible) hidden2 = Dense(20, activation='relu')(hidden1) hidden3 = Dense(10, activation='relu')(hidden2) output = Dense(1, activation='sigmoid')(hidden3) model = Model(inputs=visible, outputs=output) # summarize layers print(model.summary()) # plot graph plot_model(model, to_file='multilayer_perceptron_graph.png') ``` 運行該示例將打印網絡結構。 ```py _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= input_1 (InputLayer) (None, 10) 0 _________________________________________________________________ dense_1 (Dense) (None, 10) 110 _________________________________________________________________ dense_2 (Dense) (None, 20) 220 _________________________________________________________________ dense_3 (Dense) (None, 10) 210 _________________________________________________________________ dense_4 (Dense) (None, 1) 11 ================================================================= Total params: 551 Trainable params: 551 Non-trainable params: 0 _________________________________________________________________ ``` 還會創建模型圖的圖并將其保存到文件中。 ![Multilayer Perceptron Network Graph](https://img.kancloud.cn/72/ab/72ab764c3bec0c4c0f372b59b6f909c0_183x449.png) 多層感知器網絡圖 ### 卷積神經網絡 在本節中,我們將定義用于圖像分類的卷積神經網絡。 該模型接收黑白 64×64 圖像作為輸入,然后具有兩個卷積和池化層的序列作為特征提取器,接著是完全連接的層來解釋特征,輸出層具有用于兩類預測的 S 形激活。 ```py # Convolutional Neural Network from keras.utils import plot_model from keras.models import Model from keras.layers import Input from keras.layers import Dense from keras.layers import Flatten from keras.layers.convolutional import Conv2D from keras.layers.pooling import MaxPooling2D visible = Input(shape=(64,64,1)) conv1 = Conv2D(32, kernel_size=4, activation='relu')(visible) pool1 = MaxPooling2D(pool_size=(2, 2))(conv1) conv2 = Conv2D(16, kernel_size=4, activation='relu')(pool1) pool2 = MaxPooling2D(pool_size=(2, 2))(conv2) flat = Flatten()(pool2) hidden1 = Dense(10, activation='relu')(flat) output = Dense(1, activation='sigmoid')(hidden1) model = Model(inputs=visible, outputs=output) # summarize layers print(model.summary()) # plot graph plot_model(model, to_file='convolutional_neural_network.png') ``` 運行該示例總結了模型層。 ```py _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= input_1 (InputLayer) (None, 64, 64, 1) 0 _________________________________________________________________ conv2d_1 (Conv2D) (None, 61, 61, 32) 544 _________________________________________________________________ max_pooling2d_1 (MaxPooling2 (None, 30, 30, 32) 0 _________________________________________________________________ conv2d_2 (Conv2D) (None, 27, 27, 16) 8208 _________________________________________________________________ max_pooling2d_2 (MaxPooling2 (None, 13, 13, 16) 0 _________________________________________________________________ flatten_1 (Flatten) (None, 2704) 0 _________________________________________________________________ dense_1 (Dense) (None, 10) 27050 _________________________________________________________________ dense_2 (Dense) (None, 1) 11 ================================================================= Total params: 35,813 Trainable params: 35,813 Non-trainable params: 0 _________________________________________________________________ ``` 還會創建模型圖的圖并將其保存到文件中。 ![Convolutional Neural Network Graph](https://img.kancloud.cn/c3/8c/c38c3f571967acc0dbf78aca39832778_293x741.png) 卷積神經網絡圖 ### 遞歸神經網絡 在本節中,我們將定義一個用于序列分類的長期短期記憶遞歸神經網絡。 該模型需要 100 個時間步長作為輸入。該模型具有單個 LSTM 隱藏層以從序列中提取特征,隨后是完全連接的層以解釋 LSTM 輸出,接著是用于進行二元預測的輸出層。 ```py # Recurrent Neural Network from keras.utils import plot_model from keras.models import Model from keras.layers import Input from keras.layers import Dense from keras.layers.recurrent import LSTM visible = Input(shape=(100,1)) hidden1 = LSTM(10)(visible) hidden2 = Dense(10, activation='relu')(hidden1) output = Dense(1, activation='sigmoid')(hidden2) model = Model(inputs=visible, outputs=output) # summarize layers print(model.summary()) # plot graph plot_model(model, to_file='recurrent_neural_network.png') ``` 運行該示例總結了模型層。 ```py _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= input_1 (InputLayer) (None, 100, 1) 0 _________________________________________________________________ lstm_1 (LSTM) (None, 10) 480 _________________________________________________________________ dense_1 (Dense) (None, 10) 110 _________________________________________________________________ dense_2 (Dense) (None, 1) 11 ================================================================= Total params: 601 Trainable params: 601 Non-trainable params: 0 _________________________________________________________________ ``` 還會創建模型圖的圖并將其保存到文件中。 ![Recurrent Neural Network Graph](https://img.kancloud.cn/b6/0c/b60c02c8a77b96b92b5bec316abdf1e6_183x352.png) 遞歸神經網絡圖 ## 4.共享層模型 多個層可以共享一個層的輸出。 例如,可以存在來自輸入的多個不同的特征提取層,或者用于解釋來自特征提取層的輸出的多個層。 讓我們看看這兩個例子。 ### 共享輸入層 在本節中,我們定義了具有不同大小內核的多個卷積層來解釋圖像輸入。 該模型采用尺寸為 64×64 像素的黑白圖像。有兩個共享此輸入的 CNN 特征提取子模型;第一個內核大小為 4,第二個內核大小為 8.這些特征提取子模型的輸出被平展為向量并連接成一個長向量,并傳遞到完全連接的層以進行解釋,然后最終輸出層生成二元分類。 ```py # Shared Input Layer from keras.utils import plot_model from keras.models import Model from keras.layers import Input from keras.layers import Dense from keras.layers import Flatten from keras.layers.convolutional import Conv2D from keras.layers.pooling import MaxPooling2D from keras.layers.merge import concatenate # input layer visible = Input(shape=(64,64,1)) # first feature extractor conv1 = Conv2D(32, kernel_size=4, activation='relu')(visible) pool1 = MaxPooling2D(pool_size=(2, 2))(conv1) flat1 = Flatten()(pool1) # second feature extractor conv2 = Conv2D(16, kernel_size=8, activation='relu')(visible) pool2 = MaxPooling2D(pool_size=(2, 2))(conv2) flat2 = Flatten()(pool2) # merge feature extractors merge = concatenate([flat1, flat2]) # interpretation layer hidden1 = Dense(10, activation='relu')(merge) # prediction output output = Dense(1, activation='sigmoid')(hidden1) model = Model(inputs=visible, outputs=output) # summarize layers print(model.summary()) # plot graph plot_model(model, to_file='shared_input_layer.png') ``` 運行該示例總結了模型層。 ```py ____________________________________________________________________________________________________ Layer (type) Output Shape Param # Connected to ==================================================================================================== input_1 (InputLayer) (None, 64, 64, 1) 0 ____________________________________________________________________________________________________ conv2d_1 (Conv2D) (None, 61, 61, 32) 544 input_1[0][0] ____________________________________________________________________________________________________ conv2d_2 (Conv2D) (None, 57, 57, 16) 1040 input_1[0][0] ____________________________________________________________________________________________________ max_pooling2d_1 (MaxPooling2D) (None, 30, 30, 32) 0 conv2d_1[0][0] ____________________________________________________________________________________________________ max_pooling2d_2 (MaxPooling2D) (None, 28, 28, 16) 0 conv2d_2[0][0] ____________________________________________________________________________________________________ flatten_1 (Flatten) (None, 28800) 0 max_pooling2d_1[0][0] ____________________________________________________________________________________________________ flatten_2 (Flatten) (None, 12544) 0 max_pooling2d_2[0][0] ____________________________________________________________________________________________________ concatenate_1 (Concatenate) (None, 41344) 0 flatten_1[0][0] flatten_2[0][0] ____________________________________________________________________________________________________ dense_1 (Dense) (None, 10) 413450 concatenate_1[0][0] ____________________________________________________________________________________________________ dense_2 (Dense) (None, 1) 11 dense_1[0][0] ==================================================================================================== Total params: 415,045 Trainable params: 415,045 Non-trainable params: 0 ____________________________________________________________________________________________________ ``` 還會創建模型圖的圖并將其保存到文件中。 ![Neural Network Graph With Shared Inputs](https://img.kancloud.cn/b1/5b/b15b79f9b7d86448da74d35ba0df4520_600x644.png) 具有共享輸入的神經網絡圖 ### 共享特征提取層 在本節中,我們將使用兩個并行子模型來解釋 LSTM 特征提取器的輸出以進行序列分類。 模型的輸入是 1 個特征的 100 個時間步長。具有 10 個存儲器單元的 LSTM 層解釋該序列。第一個解釋模型是淺單個完全連接層,第二個是深 3 層模型。兩個解釋模型的輸出被連接成一個長向量,該向量被傳遞到用于進行二進制預測的輸出層。 ```py # Shared Feature Extraction Layer from keras.utils import plot_model from keras.models import Model from keras.layers import Input from keras.layers import Dense from keras.layers.recurrent import LSTM from keras.layers.merge import concatenate # define input visible = Input(shape=(100,1)) # feature extraction extract1 = LSTM(10)(visible) # first interpretation model interp1 = Dense(10, activation='relu')(extract1) # second interpretation model interp11 = Dense(10, activation='relu')(extract1) interp12 = Dense(20, activation='relu')(interp11) interp13 = Dense(10, activation='relu')(interp12) # merge interpretation merge = concatenate([interp1, interp13]) # output output = Dense(1, activation='sigmoid')(merge) model = Model(inputs=visible, outputs=output) # summarize layers print(model.summary()) # plot graph plot_model(model, to_file='shared_feature_extractor.png') ``` 運行該示例總結了模型層。 ```py ____________________________________________________________________________________________________ Layer (type) Output Shape Param # Connected to ==================================================================================================== input_1 (InputLayer) (None, 100, 1) 0 ____________________________________________________________________________________________________ lstm_1 (LSTM) (None, 10) 480 input_1[0][0] ____________________________________________________________________________________________________ dense_2 (Dense) (None, 10) 110 lstm_1[0][0] ____________________________________________________________________________________________________ dense_3 (Dense) (None, 20) 220 dense_2[0][0] ____________________________________________________________________________________________________ dense_1 (Dense) (None, 10) 110 lstm_1[0][0] ____________________________________________________________________________________________________ dense_4 (Dense) (None, 10) 210 dense_3[0][0] ____________________________________________________________________________________________________ concatenate_1 (Concatenate) (None, 20) 0 dense_1[0][0] dense_4[0][0] ____________________________________________________________________________________________________ dense_5 (Dense) (None, 1) 21 concatenate_1[0][0] ==================================================================================================== Total params: 1,151 Trainable params: 1,151 Non-trainable params: 0 ____________________________________________________________________________________________________ ``` 還會創建模型圖的圖并將其保存到文件中。 ![Neural Network Graph With Shared Feature Extraction Layer](https://img.kancloud.cn/cf/13/cf136b9c3823b64bb2b434575ee9c047_315x644.png) 共享特征提取層的神經網絡圖 ## 5.多種輸入和輸出模型 功能 API 還可用于開發具有多個輸入的更復雜模型,可能具有不同的模態。它還可用于開發產生多個輸出的模型。 我們將在本節中查看每個示例。 ### 多輸入模型 我們將開發一種圖像分類模型,該模型將圖像的兩個版本作為輸入,每個版本具有不同的大小。特別是黑白 64×64 版和 32×32 版。單獨的特征提取 CNN 模型對每個模型進行操作,然后將兩個模型的結果連接起來進行解釋和最終預測。 請注意,在創建 Model()實例時,我們將兩個輸入層定義為數組。特別: ```py model = Model(inputs=[visible1, visible2], outputs=output) ``` 下面列出了完整的示例。 ```py # Multiple Inputs from keras.utils import plot_model from keras.models import Model from keras.layers import Input from keras.layers import Dense from keras.layers import Flatten from keras.layers.convolutional import Conv2D from keras.layers.pooling import MaxPooling2D from keras.layers.merge import concatenate # first input model visible1 = Input(shape=(64,64,1)) conv11 = Conv2D(32, kernel_size=4, activation='relu')(visible1) pool11 = MaxPooling2D(pool_size=(2, 2))(conv11) conv12 = Conv2D(16, kernel_size=4, activation='relu')(pool11) pool12 = MaxPooling2D(pool_size=(2, 2))(conv12) flat1 = Flatten()(pool12) # second input model visible2 = Input(shape=(32,32,3)) conv21 = Conv2D(32, kernel_size=4, activation='relu')(visible2) pool21 = MaxPooling2D(pool_size=(2, 2))(conv21) conv22 = Conv2D(16, kernel_size=4, activation='relu')(pool21) pool22 = MaxPooling2D(pool_size=(2, 2))(conv22) flat2 = Flatten()(pool22) # merge input models merge = concatenate([flat1, flat2]) # interpretation model hidden1 = Dense(10, activation='relu')(merge) hidden2 = Dense(10, activation='relu')(hidden1) output = Dense(1, activation='sigmoid')(hidden2) model = Model(inputs=[visible1, visible2], outputs=output) # summarize layers print(model.summary()) # plot graph plot_model(model, to_file='multiple_inputs.png') ``` 運行該示例總結了模型層。 ```py ____________________________________________________________________________________________________ Layer (type) Output Shape Param # Connected to ==================================================================================================== input_1 (InputLayer) (None, 64, 64, 1) 0 ____________________________________________________________________________________________________ input_2 (InputLayer) (None, 32, 32, 3) 0 ____________________________________________________________________________________________________ conv2d_1 (Conv2D) (None, 61, 61, 32) 544 input_1[0][0] ____________________________________________________________________________________________________ conv2d_3 (Conv2D) (None, 29, 29, 32) 1568 input_2[0][0] ____________________________________________________________________________________________________ max_pooling2d_1 (MaxPooling2D) (None, 30, 30, 32) 0 conv2d_1[0][0] ____________________________________________________________________________________________________ max_pooling2d_3 (MaxPooling2D) (None, 14, 14, 32) 0 conv2d_3[0][0] ____________________________________________________________________________________________________ conv2d_2 (Conv2D) (None, 27, 27, 16) 8208 max_pooling2d_1[0][0] ____________________________________________________________________________________________________ conv2d_4 (Conv2D) (None, 11, 11, 16) 8208 max_pooling2d_3[0][0] ____________________________________________________________________________________________________ max_pooling2d_2 (MaxPooling2D) (None, 13, 13, 16) 0 conv2d_2[0][0] ____________________________________________________________________________________________________ max_pooling2d_4 (MaxPooling2D) (None, 5, 5, 16) 0 conv2d_4[0][0] ____________________________________________________________________________________________________ flatten_1 (Flatten) (None, 2704) 0 max_pooling2d_2[0][0] ____________________________________________________________________________________________________ flatten_2 (Flatten) (None, 400) 0 max_pooling2d_4[0][0] ____________________________________________________________________________________________________ concatenate_1 (Concatenate) (None, 3104) 0 flatten_1[0][0] flatten_2[0][0] ____________________________________________________________________________________________________ dense_1 (Dense) (None, 10) 31050 concatenate_1[0][0] ____________________________________________________________________________________________________ dense_2 (Dense) (None, 10) 110 dense_1[0][0] ____________________________________________________________________________________________________ dense_3 (Dense) (None, 1) 11 dense_2[0][0] ==================================================================================================== Total params: 49,699 Trainable params: 49,699 Non-trainable params: 0 ____________________________________________________________________________________________________ ``` 還會創建模型圖的圖并將其保存到文件中。 ![Neural Network Graph With Multiple Inputs](https://img.kancloud.cn/b8/3f/b83fdf3d41339908f169b8f3c2a69617_600x936.png) 多輸入神經網絡圖 ### 多輸出模型 在本節中,我們將開發一個模型,該模型可以進行兩種不同類型的預測。給定一個特征的 100 個時間步長的輸入序列,該模型將對序列進行分類并輸出具有相同長度的新序列。 LSTM 層解釋輸入序列并返回每個時間步的隱藏狀態。第一個輸出模型創建堆疊 LSTM,解釋特征并進行二元預測。第二輸出模型使用相同的輸出層對每個輸入時間步進行實值預測。 ```py # Multiple Outputs from keras.utils import plot_model from keras.models import Model from keras.layers import Input from keras.layers import Dense from keras.layers.recurrent import LSTM from keras.layers.wrappers import TimeDistributed # input layer visible = Input(shape=(100,1)) # feature extraction extract = LSTM(10, return_sequences=True)(visible) # classification output class11 = LSTM(10)(extract) class12 = Dense(10, activation='relu')(class11) output1 = Dense(1, activation='sigmoid')(class12) # sequence output output2 = TimeDistributed(Dense(1, activation='linear'))(extract) # output model = Model(inputs=visible, outputs=[output1, output2]) # summarize layers print(model.summary()) # plot graph plot_model(model, to_file='multiple_outputs.png') ``` 運行該示例總結了模型層。 ```py ____________________________________________________________________________________________________ Layer (type) Output Shape Param # Connected to ==================================================================================================== input_1 (InputLayer) (None, 100, 1) 0 ____________________________________________________________________________________________________ lstm_1 (LSTM) (None, 100, 10) 480 input_1[0][0] ____________________________________________________________________________________________________ lstm_2 (LSTM) (None, 10) 840 lstm_1[0][0] ____________________________________________________________________________________________________ dense_1 (Dense) (None, 10) 110 lstm_2[0][0] ____________________________________________________________________________________________________ dense_2 (Dense) (None, 1) 11 dense_1[0][0] ____________________________________________________________________________________________________ time_distributed_1 (TimeDistribu (None, 100, 1) 11 lstm_1[0][0] ==================================================================================================== Total params: 1,452 Trainable params: 1,452 Non-trainable params: 0 ____________________________________________________________________________________________________ ``` 還會創建模型圖的圖并將其保存到文件中。 ![Neural Network Graph With Multiple Outputs](https://img.kancloud.cn/9d/9e/9d9eb10f59baec07866655cd97e2c81e_601x449.png) 具有多個輸出的神經網絡圖 ## 6.最佳實踐 在本節中,我想給您一些提示,以便在定義自己的模型時充分利用功能 API。 * **一致的變量名稱**。對輸入(可見)和輸出層(輸出)使用相同的變量名稱,甚至可能使用隱藏層(hidden1,hidden2)。它將有助于將事物正確連接在一起。 * **審查層摘要**。始終打印模型摘要并查看層輸出,以確保模型按預期連接在一起。 * **審查圖形圖**。始終創建模型圖的圖并對其進行檢查,以確保按照您的意圖將所有內容放在一起。 * **命名層**。您可以為查看模型圖的摘要和圖時使用的層指定名稱。例如:Dense(1,name ='hidden1')。 * **單獨的子模型**。考慮分離子模型的開發并在最后將子模型組合在一起。 使用功能 API 時,您有自己的最佳實踐技巧嗎? 請在評論中告訴我。 ## 7.關于 Functional API Python 語法的注釋 如果您是 Python 的新手或新手,功能 API 中使用的語法可能會令人困惑。 例如,給定: ```py ... dense1 = Dense(32)(input) ... ``` **雙括號語法有什么作用?** **這是什么意思?** 它看起來很混亂,但它不是一個特殊的 python 東西,只有一行做兩件事。 第一個括號“_(32)_”通過類構造函數創建層,第二個括號“_(輸入)_”是一個沒有通過 ___call __ 實現名稱的函數( )_ 功能,調用時會連接各層。 [__call __()](https://docs.python.org/3/reference/datamodel.html#object.__call__)函數是所有可以被覆蓋的 Python 對象的默認函數,用于“_ 調用 _”實例化對象。就像 [__init __()](https://docs.python.org/3/reference/datamodel.html#object.__init__)函數是在實例化一個對象以初始化它之后調用的所有對象上的默認函數。 我們可以用兩行來做同樣的事情: ```py # create layer dense1 = Dense(32) # connect layer to previous layer dense1(input) ``` 我想我們也可以明確地調用對象上的 ___call __()_ 函數,雖然我從未嘗試過: ```py # create layer dense1 = Dense(32) # connect layer to previous layer dense1.__call_(input) ``` ## 進一步閱讀 如果您要深入了解,本節將提供有關該主題的更多資源。 * [順序模型 API](https://keras.io/models/model/) * [Keras 順序模型入門](https://keras.io/models/model/) * [Keras 功能 API 入門](https://keras.io/models/model/) * [模型類功能 API](https://keras.io/models/model/) ## 摘要 在本教程中,您了解了如何使用 Keras 中的功能 API 來定義簡單和復雜的深度學習模型。 具體來說,你學到了: * Sequential 和 Functional API 之間的區別。 * 如何使用功能 API 定義簡單的多層感知器,卷積神經網絡和遞歸神經網絡模型。 * 如何使用共享層和多個輸入和輸出定義更復雜的模型。 你有任何問題嗎? 在下面的評論中提出您的問題,我會盡力回答。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看