<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>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 三、Keras 101 Keras 是一個高級庫,允許使用 TensorFlow 作為后端深度學習庫。 TensorFlow 團隊將 TrasorFlow Core 中的 Keras 作為模塊`tf.keras`。除了 TensorFlow 之外,Keras 在撰寫本書時還支持 Theano 和 CNTK。 以下 Keras 的指導原則使其在深度學習社區中非常受歡迎: * 極簡主義提供一致且簡單的 API * 模塊化允許將各種元素表示為可插拔模塊 * 將新模塊添加為類和函數的可擴展性 * 用于代碼和模型配置的 Python 原生 * 開箱即用的通用網絡架構,支持 CNN,RNN 或兩者的組合 在本書的其余部分中,我們將學習如何使用低級 TensorFlow API 和高級 Keras API 構建不同類型的深度學習和機器學習模型。 我們將在本章中介紹以下主題: * 安裝 Keras * 在 Keras 中創建模型的工作流程 * 使用順序和函數式 API 創建 Keras 模型 * Keras 層 * 使用順序和函數式 API 創建和添加層 * 編譯 Keras 模型 * 訓練 Keras 模型 * 使用 Keras 模型進行預測 * Keras 的附加模塊 * MNIST 數據集的 Keras 序列模型示例 # 安裝 Keras 使用以下命令可以在 Python 3 中安裝 Keras: ```py pip3 install keras ``` [要在其他環境或源代碼中安裝 Keras,請參閱此鏈接](https://keras.io/#installation)。 # Keras 中的神經網絡模型 Keras 中的神經網絡模型將定義為層圖。 Keras 中的模型可以使用順序或函數式 API 創建。函數式和順序 API 都可用于構建任何類型的模型。函數式 API 可以更輕松地構建具有多個輸入,多個輸出和共享層的復雜模型。 因此,根據經驗,我們已經看到工程師將順序 API 用于從簡單層構建的簡單模型,以及用于涉及分支和共享層的復雜模型的函數式 API。我們還觀察到,使用函數式 API 構建簡單模型可以更輕松地將模型擴展為具有分支和共享的復雜模型。因此,對于我們的工作,我們總是使用函數式 API。 # 在 Keras 中創建模型的工作流程 Keras 的簡單工作流程如下: 1. 創建模型 2. 創建層并將其添加到模型中 3. 編譯模型 4. 訓練模型 5. 使用該模型進行預測或評估 我們來看看每個步驟。 您可以使用代碼包中包含的 Jupyter 筆記本`ch-03_Keras_101`來遵循本章中的代碼示例。 嘗試修改筆記本中的代碼以探索各種選項。 # 創建 Keras 模型 可以使用順序 API 或函數式 API 創建 Keras 模型。以下兩小節給出了以兩種方式創建模型的示例 。 # 用于創建 Keras 模型的順序 API 在順序 API 中,使用以下代碼創建空模型: ```py model = Sequential() ``` 您現在可以將層添加到此模型中,我們將在下一節中看到。 或者,您也可以將所有層作為列表傳遞給構造器。例如,我們通過使用以下代碼將它們傳遞給構造器來添加四個層: ```py model = Sequential([ Dense(10, input_shape=(256,)), Activation('tanh'), Dense(10), Activation('softmax') ]) ``` # 用于創建 Keras 模型的函數式 API 在函數式 API 中,模型創建為`Model`類的一個實例,它接受輸入和輸出參數。輸入和輸出參數分別代表一個或多個輸入和輸出張量。 例如,使用以下代碼從函數式 API 實例化模型: ```py model = Model(inputs=tensor1, outputs=tensor2) ``` 在上面的代碼中,`tensor1`和`tensor2`是張量或對象,可以像張量一樣對待,例如,Keras `layer`對象。 如果有多個輸入和輸出張量,則可以將它們作為列表傳遞,如以下示例所示: ```py model = Model(inputs=[i1,i2,i3], outputs=[o1,o2,o3]) ``` # Keras 層 Keras 為網絡架構的簡單構建提供了幾個內置層類。以下部分概述和描述了 Keras2 在撰寫本書時提供的各種類型的層。 # Keras 核心層 Keras 核心層實現基本操作,幾乎用于各種網絡架構。下表給出了 Keras2 提供的層的摘要和說明: | **層名稱** | **描述** | | --- | --- | | `Dense` | 這是一個簡單的完全連接的神經網絡層。該層生成以下函數的輸出:`激活(輸入 x 權重 + 偏差)`,其中激活是指傳遞給層的激活函數,默認為`None`。 | | `Activation` | 該層將指定的激活函數應用于輸出。該層生成以下函數的輸出:`激活(輸入)`,其中激活是指傳遞給該層的激活函數。以下激活函數可用于實例化層:`softmax`,`elu`,`selu`,`softplus`,`softsign`,`relu`,`tanh`,`sigmoid`,`hard_sigmoid`和`linear` | | `Dropout` | 該層以指定的丟棄率將丟棄正則化應用于輸入。 | | `Flatten` | 該層使輸入變平,即對于三維輸入,它變平并產生一維輸出。 | | `Reshape` | 此層將輸入轉換為指定的形狀。 | | `Permute` | 此層按照指定的模式重新排序輸入尺寸。 | | `RepeatVector` | 該層以給定次數重復輸入。因此,如果輸入是 2D 張量的形狀`(#samples, #feature)`并且該層被賦予`n`次重復,那么輸出將是 3D 張量的形狀`(#samples, n, #feature)`。 | | `Lambda` | 該層將提供的函數包裝為層。因此,輸入通過提供的自定義函數傳遞以產生輸出。該層為 Keras 用戶提供了最終的可擴展性,可以將自己的自定義函數添加為層。 | | `ActivityRegularization` | 該層將 L1 或 L2 或兩種正則化的組合應用于其輸入。該層應用于激活層的輸出或具有激活函數的層的輸出。 | | `Masking` | 此層在輸入張量中屏蔽或跳過這些時間步長,其中輸入張量中的所有值都等于作為層參數提供的屏蔽值。 | # Keras 卷積層 這些層為卷積神經網絡實現了不同類型的卷積,采樣和裁剪操作: | **層名稱** | **描述** | | --- | --- | | `Conv1D` | 該層將單個空間或時間維度上的卷積應用于輸入。 | | `Conv2D` | 該層將二維卷積應用于輸入。 | | `SeparableConv2D` | 該層在每個輸入通道上應用深度方式空間卷積,然后是逐點卷積,將所得到的輸出通道混合在一起。 | | `Conv2DTranspose` | 該層將卷積的形狀恢復為產生這些卷積的輸入的形狀。 | | `Conv3D` | 該層將三維卷積應用于輸入。 | | `Cropping1D` | 該層沿時間維度裁剪輸入數據。 | | `Cropping2D` | 此層沿空間維度裁剪輸入數據,例如圖像的寬度和高度。 | | `Cropping3D` | 該層沿著時空裁剪輸入數據,即所有三維。 | | `UpSampling1D` | 該層按時間軸指定的時間重復輸入數據。 | | `UpSampling2D` | 此層沿兩個維度按指定時間重復輸入數據的行和列維度。 | | `UpSampling3D` | 該層按三個維度的指定時間重復輸入數據的三個維度。 | | `ZeroPadding1D` | 該層將零添加到時間維度的開頭和結尾。 | | `ZeroPadding2D` | 此層將行和列的零添加到 2D 張量的頂部,底部,左側或右側。 | | `ZeroPadding3D` | 該層將零添加到 3D 張量的三個維度。 | # Keras 池化層 這些層為卷積神經網絡實現不同的池化操作: | **層名稱** | **描述** | | --- | --- | | `MaxPooling1D` | 該層實現一維輸入數據的最大池化操作。 | | `MaxPooling2D` | 該層實現二維輸入數據的最大池化操作。 | | `MaxPooling3D` | 該層實現三維輸入數據的最大池化操作。 | | `AveragePooling1D` | 該層實現一維輸入數據的平均池化操作。 | | `AveragePooling2D` | 該層實現二維輸入數據的平均池化操作。 | | `AveragePooling3D` | 該層實現三維輸入數據的平均吃阿虎操作。 | | `GlobalMaxPooling1D` | 該層實現一維輸入數據的全局最大池化操作。 | | `GlobalAveragePooling1D` | 該層實現一維輸入數據的全局平均池化操作。 | | `GlobalMaxPooling2D` | 該層實現二維輸入數據的全局最大池化操作。 | | `GlobalAveragePooling2D` | 該層實現二維輸入數據的全局平均池化操作。 | # Keras 本地連接層 這些層在卷積神經網絡中很有用: | **層名稱** | **描述** | | --- | --- | | `LocallyConnected1D` | 該層通過在輸入的每個不同補丁上應用不同的濾波器組,將單個空間或時間維度上的卷積應用于輸入,從而不共享權重。 | | `LocallyConnected2D` | 該層通過在輸入的每個不同補丁上應用不同的濾波器組,將兩個維上的卷積應用于輸入,從而不共享權重。 | # Keras 循環層 這些層實現循環神經網絡的不同變體: | **層名稱** | **描述** | | --- | --- | | `SimpleRNN` | 該層實現了完全連接的循環神經網絡。 | | `GRU` | 該層實現了門控循環單元網絡。 | | `LSTM` | 該層實現了長期短期記憶網絡。 | # Keras 嵌入層 目前,只有一個嵌入層選項可用: | **層名稱** | **描述** | | --- | --- | | `Embedding` | 該層采用由下標組成的 2D 張量,形狀為`(batch_size, sequence_length)`,并產生由形狀`(batch_size, sequence_length, output_dim)`的密集向量組成的張量。 | # Keras 合并層 這些層合并兩個或多個輸入張量,并通過應用每個層表示的特定操作產生單個輸出張量: | **層名稱** | **描述** | | --- | --- | | `Add` | 該層計算輸入張量的逐元素加法。 | | `Multiply` | 該層計算輸入張量的逐元素乘法 | | `Average` | 該層計算輸入張量的逐元素平均值。 | | `Maximum` | 該層計算輸入張量的逐元素最大值。 | | `Concatenate` | 此層沿指定軸連接輸入張量。 | | `Dot` | 該層計算兩個輸入張量中樣本之間的點積。 | | `add`,`multiply`,`average`,`maximum`,`concatenate`和`dot` | 這些函數表示此表中描述的各個合并層的函數接口。 | # Keras 高級激活層 這些層實現了高級激活函數,這些函數無法作為簡單的底層后端函數實現。它們的操作類似于我們在核心層部分中介紹的`Activation()`層: | **層名稱** | **描述** | | --- | --- | | `LeakyReLU` | 該層計算`ReLU`激活函數的泄漏版本。 | | `PReLU` | 該層計算參數化`ReLU`激活函數。 | | `ELU` | 該層計算指數線性單元激活函數。 | | `ThresholdedReLU` | 該層計算閾值版本的`ReLU`激活函數。 | # Keras 正則化層 目前,只有一個標準化層可用: | **層名稱** | **描述** | | --- | --- | | `BatchNormalization` | 該層標準化前一層的每個批量的輸出,使得該層的輸出近似為具有接近零的平均值和接近 1 的標準偏差。 | # Keras 噪音層 這些層可以添加到模型中,以防止過擬合添加噪音;它們也被稱為正則化層。這些層的操作方式與核心層部分中的`Dropout()`和`ActivityRegularizer()`層相同。 | **層名稱** | **描述** | | --- | --- | | `GaussianNoise` | 該層將附加的零中心高斯噪聲應用于輸入。 | | `GaussianDropout` | 該層將乘法的單中心高斯噪聲應用于輸入。 | | `AlphaDropout` | 該層丟棄一定百分比的輸入,使得丟棄后輸出的均值和方差與輸入的均值和方差緊密匹配。 | # 將層添加到 Keras 模型 上一節中提到的所有層都需要添加到我們之前創建的模型中。在以下部分中,我們將介紹如何使用函數式 API 和順序 API 添加層。 # 用于向 Keras 模型添加層的順序 API 在順序 API 中,可以通過實例化前面部分中給出的某個層類型的對象來創建層。然后使用`model.add()`函數將創建的層添加到模型中。作為示例,我們將創建一個模型,然后為其添加兩個層: ```py model = Sequential() model.add(Dense(10, input_shape=(256,)) model.add(Activation('tanh')) model.add(Dense(10)) model.add(Activation('softmax')) ``` # 用于向 Keras 模型添加層的函數式 API 在函數式 API 中,首先以函數方式創建層,然后在創建模型時,輸入和輸出層作為張量參數提供,如我們在上一節。 這是一個例子: 1. 首先,創建輸入層: ```py input = Input(shape=(64,)) ``` 1. 接下來,以函數方式從輸入層創建密集層: ```py hidden = Dense(10)(inputs) ``` 1. 以同樣的方式,以函數方式創建更多隱藏層,構建在前面的層之上: ```py hidden = Activation('tanh')(hidden) hidden = Dense(10)(hidden) output = Activation('tanh')(hidden) ``` 1. 最后,使用輸入和輸出層實例化模型對象: ```py model = Model(inputs=input, outputs=output) ``` 有關創建順序和函數式 Keras 模型的更深入細節,您可以閱讀由 Antonio Gulli 和 Sujit Pal,Packt Publishing,2017 年出版的題為 Deep Learning with Keras 的書。 # 編譯 Keras 模型 前面部分中構建的模型需要使用`model.compile()`方法進行編譯,然后才能用于訓練和預測。`compile()`方法的完整簽名如下: ```py compile(self, optimizer, loss, metrics=None, sample_weight_mode=None) ``` `compile`方法有三個參數: * `optimizer`:您可以指定自己的函數或 Keras 提供的函數之一。此函數用于更新優化迭代中的參數。 Keras 提供以下內置優化器函數: * `SGD` * `RMSprop` * `Adagrad` * `Adadelta` * `Adam` * `Adamax` * `Nadam` * `loss`:您可以指定自己的損失函數或使用提供的損失函數之一。優化器函數優化參數,以便最小化此損失函數的輸出。 Keras 提供以下損失函數: * `mean_squared_error` * `mean_absolute_error` * `mean_absolute_pecentage_error` * `mean_squared_logarithmic_error` * `squared_hinge` * `hinge` * `categorical_hinge` * `sparse_categorical_crossentropy` * `binary_crossentropy` * `poisson` * `cosine proximity` * ``binary_accuracy`` * `categorical_accuracy` * `sparse_categorical_accuracy` * `top_k_categorical_accuracy` * `sparse_top_k_categorical_accuracy` * `metrics`:第三個參數是訓練模型時需要收集的指標列表。如果啟用了詳細輸出,則會為每次迭代打印度量標準。指標就像損失函數;一些由 Keras 提供,能夠編寫您自己的度量函數。所有損失函數也可用作度量函數。 # 訓練 Keras 模型 訓練 Keras 模型就像調用`model.fit()`方法一樣簡單。該方法的完整簽名如下: ```py fit(self, x, y, batch_size=32, epochs=10, verbose=1, callbacks=None, validation_split=0.0, validation_data=None, shuffle=True, class_weight=None, sample_weight=None, initial_epoch=0) ``` 我們不會詳細介紹這種方法的參數; 您可以在 [Keras 網站](https://keras.io/models/sequential/)上閱讀詳細信息。 對于我們之前創建的示例模型,使用以下代碼訓練模型: ```py model.fit(x_data, y_labels) ``` # 使用 Keras 模型進行預測 經過訓練的模型可用于使用`model.predict()`方法來預測值,或用`model.evaluate()`方法評估模型。 這兩種方法的簽名如下: ```py predict(self, x, batch_size=32, verbose=0) ``` ```py evaluate(self, x, y, batch_size=32, verbose=1, sample_weight=None) ``` # Keras 的附加模塊 Keras 提供了幾個補充基本工作流程的附加模塊(附加函數在本章開頭描述)。部分模塊如下: * `preprocessing`模塊提供了幾種預處理序列,圖像和文本數據的函數。 * `datasets`模塊提供了多種函數,可以快速訪問幾個流行的數據集,如 CIFAR10 圖像,CIFAR100 圖像,IMDB 電影評論,路透社新聞專線主題,MNIST 手寫數字和波士頓房價。 * `initializers`模塊提供了幾種設置層初始隨機權重參數的函數,如`Zeros`,`Ones`,`Constant`,`RandomNormal`,`RandomUniform`,`TruncatedNormal`,`VarianceScaling`,`Orthogonal`,`Identity`,`lecun_normal`,`lecun_uniform`,`glorot_normal`,`glorot_uniform`,`he_normal`和`he_uniform`。 * `models`模塊提供了幾種恢復模型架構和權重的函數,如`model_from_json`,`model_from_yaml`,和`load_model`。可以使用`model.to_yaml()`和`model.to_json()`方法保存模型架構。通過調用`model.save()`方法可以保存模型權重。權重保存在 HDF5 文件中。 * `applications`模塊提供了幾種預先構建和預訓練的模型,例如 Xception,VGG16,VGG19,ResNet50,InceptionV3,InceptionResNetV2 和 MobileNet。我們將學習如何使用預建模型來預測我們的數據集。我們還將學習,如何使用來自略有不同的域的數據集,再訓練`applications`模塊中的預訓練模型。 這就結束了我們對 Keras 的簡要介紹,這是 TensorFlow 的高級框架。我們將在本書中提供使用 Keras 構建模型的示例。 # 用于 MNIST 數據集的 Keras 序列模型示例 以下是構建簡單多層感知機(在第 5 章中詳細介紹)的一個小例子,用于對 MNIST 集中的手寫數字進行分類: ```py import keras from keras.datasets import mnist from keras.models import Sequential from keras.layers import Dense, Dropout from keras.optimizers import SGD from keras import utils import numpy as np # define some hyper parameters batch_size = 100 n_inputs = 784 n_classes = 10 n_epochs = 10 # get the data (x_train, y_train), (x_test, y_test) = mnist.load_data() # reshape the two dimensional 28 x 28 pixels # sized images into a single vector of 784 pixels x_train = x_train.reshape(60000, n_inputs) x_test = x_test.reshape(10000, n_inputs) # convert the input values to float32 x_train = x_train.astype(np.float32) x_test = x_test.astype(np.float32) # normalize the values of image vectors to fit under 1 x_train /= 255 x_test /= 255 # convert output data into one hot encoded format y_train = utils.to_categorical(y_train, n_classes) y_test = utils.to_categorical(y_test, n_classes) # build a sequential model model = Sequential() # the first layer has to specify the dimensions of the input vector model.add(Dense(units=128, activation='sigmoid', input_shape=(n_inputs,))) # add dropout layer for preventing overfitting model.add(Dropout(0.1)) model.add(Dense(units=128, activation='sigmoid')) model.add(Dropout(0.1)) # output layer can only have the neurons equal to the number of outputs model.add(Dense(units=n_classes, activation='softmax')) # print the summary of our model model.summary() # compile the model model.compile(loss='categorical_crossentropy', optimizer=SGD(), metrics=['accuracy']) # train the model model.fit(x_train, y_train, batch_size=batch_size, epochs=n_epochs) # evaluate the model and print the accuracy score scores = model.evaluate(x_test, y_test) print('\n loss:', scores[0]) print('\n accuracy:', scores[1]) ``` 我們從描述和訓練 Keras 模型得到以下輸出: ```py _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= dense_7 (Dense) (None, 128) 100480 _________________________________________________________________ dropout_5 (Dropout) (None, 128) 0 _________________________________________________________________ dense_8 (Dense) (None, 128) 16512 _________________________________________________________________ dropout_6 (Dropout) (None, 128) 0 _________________________________________________________________ dense_9 (Dense) (None, 10) 1290 ================================================================= Total params: 118,282 Trainable params: 118,282 Non-trainable params: 0 _________________________________________________________________ Epoch 1/10 60000/60000 [========================] - 3s - loss: 2.3018 - acc: 0.1312 Epoch 2/10 60000/60000 [========================] - 2s - loss: 2.2395 - acc: 0.1920 Epoch 3/10 60000/60000 [========================] - 2s - loss: 2.1539 - acc: 0.2843 Epoch 4/10 60000/60000 [========================] - 2s - loss: 2.0214 - acc: 0.3856 Epoch 5/10 60000/60000 [========================] - 3s - loss: 1.8269 - acc: 0.4739 Epoch 6/10 60000/60000 [========================] - 2s - loss: 1.5973 - acc: 0.5426 Epoch 7/10 60000/60000 [========================] - 2s - loss: 1.3846 - acc: 0.6028 Epoch 8/10 60000/60000 [========================] - 3s - loss: 1.2133 - acc: 0.6502 Epoch 9/10 60000/60000 [========================] - 3s - loss: 1.0821 - acc: 0.6842 Epoch 10/10 60000/60000 [========================] - 3s - loss: 0.9799 - acc: 0.7157 loss: 0.859834249687 accuracy: 0.788 ``` 您可以看到,在 Keras 中構建和訓練模型是多么容易。 您可以從[他們記錄完備的網站](https://keras.io)獲取有關 Keras 的更多信息。 # 總結 在本章中,我們了解了 Keras。 Keras 是 TensorFlow 最受歡迎的高級庫。我個人更喜歡將 Keras 用于我為商業制作和學術研究開發的所有模型。我們學習了使用函數式和順序 API 在 Keras 中創建和訓練模型所遵循的工作流程。我們了解了各種 Keras 層以及如何將層添加到順序和函數式模型中。我們還學習了如何編譯,訓練和評估 Keras 模型。我們還看到了 Keras 提供的一些附加模塊。 在本書的其余章節中,我們將介紹核心 TensorFlow 和 Keras 中的大多數示例。 在下一章中,我們將學習如何使用 TensorFlow 構建傳統的機器學習模型進行分類和回歸。
                  <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>

                              哎呀哎呀视频在线观看