使用 Keras 進行深度學習:使用 Keras 訓練神經網絡 [附代碼]
已發表: 2020-12-24Keras 是一個 Python 庫,它提供了一個與神經網絡和深度學習框架一起工作的 API。 Keras 提供了在 Python 中處理各種深度學習應用程序時非常方便的函數和模塊。
在本教程結束時,您將掌握以下知識:
- 什麼是 Keras?
- Keras API
- 在 Keras 中訓練神經網絡
目錄
什麼是 Keras?
要進行深度學習,早期使用最多的庫是 Tensorflow 1.x,對於初學者來說很難處理。 它需要大量的編碼才能製作一個基本的 1 層網絡。 然而,使用 Keras,製作神經網絡結構然後訓練和跟踪它的完整過程變得非常容易。
Keras 是一個高級 API,可以在 Tensorflow、Theano 和 CNTK 後端運行。 它使我們能夠使用高級和用戶友好的 API 使用神經網絡運行實驗。 它還能夠在 CPU 和 GPU 上運行。
Keras API
Keras 有 10 個不同的 API 模塊,用於處理神經網絡的建模和訓練。 讓我們回顧一下它們,以了解所有 Keras 所提供的功能。
楷模
Models API 提供了通過添加/刪除層來構建複雜神經網絡的功能。 該模型可以是順序的,這意味著層將通過單個輸入和輸出順序堆疊。 該模型也可以是功能性的,意思是,具有完全可定制的模型。 這是行業中最常用的。

API 還具有訓練模塊,該模塊提供編譯模型以及優化器和損失函數的方法、擬合模型的方法、評估和預測新數據的方法。 此外,它還具有對批量數據進行訓練、測試和預測的方法。 Models API 也有模型的保存和序列化。
圖層
層是任何神經網絡的構建塊。 Layers API 提供了一整套用於構建神經網絡架構的方法。 Layers API 具有 Base Layer 類,其中包含使用自定義權重和初始化器構建自定義層所需的方法。
它包含 Layer Activations 類,該類由各種激活函數組成,例如 ReLU、Sigmoid、Tanh、Softmax 等。Layer Weight Initializers 類提供了使用不同方式初始化權重的方法。
它還包含核心層類,該類包含添加核心層所需的類,如密集層、激活層、嵌入層等。卷積層類提供了各種方法來添加不同類型的捲積層。 Pooling Layers 類包含不同類型的池化所需的方法,例如 Max Pooling、Average Pooling、Global Max Pooling 和 Global Average Pooling。
回調
回調是跟踪模型訓練過程的一種方式。 啟用回調後,可以在一個時期或批次結束之前或之後執行各種操作。 使用回調,您可以:
- 通過在 TensorFlow Board 中記錄指標來監控訓練指標
- 定期將模型保存到磁盤
- 提前停止,以防在特定時期後損失沒有顯著減少
- 在訓練期間查看模型的內部狀態和統計信息
數據集預處理
數據通常是原始格式,位於排列好的目錄中,需要在輸入模型進行擬合之前進行預處理。 Image Data Preprocessing 類有許多這樣的專用功能。 例如,圖像數據需要在數值數組中,我們可以使用 img_to_array 函數。 或者,如果圖像存在於目錄和子文件夾中,我們可以使用 image_dataset_from_directory 函數。
數據預處理 API 也有時間序列數據和文本數據的類。
優化器
優化器是任何神經網絡的支柱。 每個神經網絡都致力於優化損失函數以找到最佳的預測權重。 有多種優化器遵循略有不同的技術來找到最佳權重。 所有這些優化器都在 Optimizers API 中可用——SGD、RMSProp、Adam、Adadelta、Adagrad、Admax、Nadal、FTRL。
損失
編譯模型時需要指定損失函數。 該損失函數將由優化器進行優化,該優化器也作為 compile 方法中的參數傳遞。 三個主要損失類別是:概率損失、回歸損失、鉸鏈損失。
指標
每個 ML 模型都使用指標來量化其在測試數據上的性能。 度量與損失函數類似,不同之處在於它們用於測試數據。 有許多可用的準確度指標,例如準確度、二元準確度、分類準確度等。它還包含概率指標,例如二元交叉熵、分類交叉熵等。還有一些用於檢查誤報/負數的指標,例如 AUC、精度、召回率等
除了這些分類指標外,它還具有回歸指標,如均方誤差、均方根誤差、平均絕對誤差等。
另請閱讀: Keras 和 TensorFlow 是什麼
Keras 應用程序
Keras 應用程序類由一些預構建的模型和預訓練的權重組成。 這些預訓練模型用於遷移學習過程。 這些預訓練模型根據架構、層數、可訓練權重等而有所不同。其中一些是 Xception、VGG16、Resnet50、MobileNet 等。
使用 Keras 訓練神經網絡
讓我們考慮一個簡單的數據集,例如 Keras 的數據集類中可用的 MNIST。 我們將製作一個簡單的順序卷積神經網絡,用於對數字 0-9 的手寫圖像進行分類。
| #加載數據集 從keras.datasets導入mnist (x_train, y_train), (x_test, y_test) = mnist.load_data() |
通過將每個像素除以 255 來規範化數據集。此外,需要將圖像轉換為 4 維,然後再將其輸入 CNN 模型。

| x_train = x_train.astype( 'float32' ) x_test = x_test.astype( 'float32' ) x_train /= 255 x_test /= 255 x_train = X_train.reshape(X_train.shape[ 0 ], 28 , 28 , 1 ) x_test = X_test.reshape(X_test.shape[ 0 ], 28 , 28 , 1 ) |
在將類輸入模型之前,我們需要對其進行標記編碼。 我們將通過使用 Keras 的 Utils 類來做到這一點。
| 從keras.utils導入to_categorical
|
現在,我們可以開始使用 Sequential API 創建模型。
| 從keras.models導入順序 from keras.layers import Conv2D, MaxPool2D, Dense, Flatten, Dropout model = Sequential() model.add(Conv2D(filters= 32 , kernel_size=( 5 , 5 ), activation= 'relu' , input_shape=x_train.shape[ 1 :])) model.add(MaxPool2D(pool_size=( 2 , 2 ))) model.add(輟學(率= 0.25 )) model.add(Conv2D(filters= 64 , kernel_size=( 3 , 3 ), activation= 'relu' )) model.add(MaxPool2D(pool_size=( 2 , 2 ))) model.add(輟學(率= 0.25 )) model.add(展平()) model.add(密集( 256 ,激活= 'relu' )) model.add(輟學(率= 0.5 )) model.add(密集( 10 ,激活= 'softmax' )) |
在上面的代碼中,我們聲明了一個順序模型,然後向它添加了多個層。 卷積層,然後是 Max Pooling 層,然後是用於正則化的 dropout 層。 稍後我們使用 flatten 層對輸出進行展平,最後一層是具有 10 個節點的全連接密集層。
接下來,我們需要通過傳遞損失函數、優化器和度量來編譯它。
| 模型.編譯( 損失= 'categorical_crossentropy' , 優化器= '亞當' , 指標=[ '準確性' ] ) |
現在我們需要從原始圖像中添加增強圖像以增加模型的訓練集和準確性。 我們將使用 ImageDataGenerator 函數來做到這一點。
| 從keras.preprocessing.image導入ImageDataGenerator 數據生成 = 圖像數據生成器( 旋轉範圍= 10 , 縮放範圍= 0.1 , width_shift_range= 0.1 , height_shift_range= 0.1 ) |
現在模型已編譯,圖像已增強,我們可以開始訓練過程。 由於我們在上面使用了圖像數據生成器,因此我們將使用 fit_generator 方法,而不僅僅是 fit。

| 時代 = 3 批量大小 = 32 history = model.fit_generator( datagen.flow(x_train, y_train, batch_size=batch_size), epochs=epochs, validation_data=(x_test, y_test), steps_per_epoch=x_train.shape[ 0 ]//batch_size ) |
訓練過程的輸出如下:

3現在模型已經過訓練,可以通過在看不見的測試數據上運行它來進行評估。
相關閱讀:使用 Keras 的深度學習和神經網絡
在你走之前
在本教程中,我們看到了 Keras 的結構以及如何輕鬆構建複雜的神經網絡。 Keras 現在被包裹在 Tensorflow 2.x 下,這賦予了它更多的功能。 嘗試更多此類示例並探索 Keras 的功能和特性。
如果您有興趣了解有關機器學習的更多信息,請查看 IIIT-B 和 upGrad 的機器學習和人工智能 PG 文憑,該文憑專為工作專業人士設計,提供 450 多個小時的嚴格培訓、30 多個案例研究和作業、IIIT- B 校友身份、5 個以上實用的實踐頂點項目和頂級公司的工作協助。
