返回文章列表

Keras Tuner 自動化超引數調優與模型佈署

本文介紹如何使用 Keras Tuner 進行深度學習模型的超引數調優,並搭配 AWS MWAA 佈署和監控模型。文章涵蓋 Keras Tuner 的 RandomSearch 搜尋演算法,以及在 AWS 上設定環境、開發 DAG、上傳 DAG 到 S3、組態 MWAA 環境、觸發 DAG

機器學習 Web 開發

深度學習模型的效能高度依賴於超引數的設定。Keras Tuner 提供了自動化的超引數調優功能,可以有效地搜尋最佳的超引陣列合。本文將探討如何使用 Keras Tuner 的 RandomSearch 演算法,並結合 AWS MWAA 服務,實作深度學習模型的自動化佈署和監控。首先,我們會利用 Keras Tuner 建立一個 HyperModel,定義需要調整的超引數,例如神經元數量、學習率等,並使用 RandomSearch 搜尋最佳的超引陣列合。接著,我們會將訓練好的模型佈署到 AWS 上,利用 MWAA 協調整個佈署流程,包含資料預處理、模型訓練、模型佈署等步驟。最後,我們會示範如何監控模型的執行狀況,確保模型在生產環境中的穩定性和效能。

使用 Keras Tuner 自動化超引數調優

在機器學習模型的開發過程中,超引數的選擇對於模型的效能有著至關重要的影響。Keras Tuner 是一個強大的工具,可以幫助我們自動化超引數調優的過程。

TSLA 股價迴歸模型的超引數調優

首先,我們定義了一個 TSLAHyperModel 類別,繼承自 HyperModel。這個類別定義了模型的架構,並允許 Keras Tuner 搜尋最佳的超引數。

class TSLAHyperModel(HyperModel):
    """
    HyperModel 類別,用於 TSLA 股價迴歸。
    定義模型架構並允許 Keras Tuner 搜尋最佳超引數。
    """
    def __init__(self, input_shape):
        self.input_shape = input_shape

    def build(self, hp):
        model = Sequential()
        model.add(
            Dense(
                units=hp.Int(
                    'units_1',
                    min_value=32,
                    max_value=256,
                    step=32
                ),
                activation='relu',
                input_shape=(self.input_shape,)
            )
        )
        model.add(
            Dense(
                units=hp.Int(
                    'units_2',
                    min_value=16,
                    max_value=128,
                    step=16
                ),
                activation='relu'
            )
        )
        model.add(Dense(1))
        model.compile(optimizer='adam', loss='mse')
        return model

內容解密:

  1. TSLAHyperModel 類別:這個類別是用來定義模型架構的,並且它允許 Keras Tuner 對模型的超引數進行搜尋。
  2. build 方法:這個方法是用來建立模型的。它使用 Keras Tuner 的 hp.Int 方法來定義超引數的搜尋空間。
  3. units_1units_2:這兩個超引數是用來控制模型中 Dense 層的神經元數量的。它們的取值範圍分別是 32 到 256 和 16 到 128,步長分別是 32 和 16。
  4. activation='relu':這是 Dense 層的啟用函式,使用 ReLU 函式。
  5. model.compile:這是用來編譯模型的,最佳化器使用 Adam,損失函式使用均方誤差(MSE)。

使用 RandomSearch 進行超引數調優

接下來,我們使用 RandomSearch 演算法來進行超引數調優。

hypermodel = TSLAHyperModel(input_shape=train_features.shape[1])
tuner = RandomSearch(
    hypermodel,
    objective='val_loss',
    max_trials=10,
    executions_per_trial=3,
    directory='my_dir',
    project_name='TSLA_regression'
)
tuner.search(train_features, train_labels, epochs=100, batch_size=32, validation_split=0.2)

內容解密:

  1. RandomSearch 演算法:這是一種根據隨機搜尋的超引數調優演算法。
  2. objective='val_loss':這是用來指定評估模型的指標的,這裡使用驗證集上的損失值。
  3. max_trials=10:這是用來指定搜尋的最多次數的。
  4. executions_per_trial=3:這是用來指定每次搜尋中執行的次數的。
  5. directoryproject_name:這是用來指定儲存搜尋結果的目錄和專案名稱的。

取得最佳超引數和訓練模型

最後,我們可以取得最佳的超引數並訓練模型。

best_hps = tuner.get_best_hyperparameters(num_trials=1)[0]
best_model = tuner.hypermodel.build(best_hps)
best_model.fit(train_features, train_labels, epochs=100, batch_size=32)

內容解密:

  1. get_best_hyperparameters:這是用來取得最佳超引數的方法。
  2. build(best_hps):這是用來建立使用最佳超引數的模型的方法。
  3. fit:這是用來訓練模型的方法。

透過使用 Keras Tuner,我們可以自動化超引數調優的過程,從而提高模型的效能。

深度學習模型效能最佳化技術實務

超引數最佳化與模型調校

在深度學習模型的開發過程中,超引數的選擇對於模型的效能具有決定性的影響。Keras Tuner 提供了一種系統化的方法來進行超引數的最佳化,透過隨機搜尋(Random Search)的方式找出最佳的超引陣列合。

程式碼範例:使用 Keras Tuner 進行超引數最佳化

def build_model(hp):
    model = Sequential()
    model.add(Dense(
        units=hp.Int('units_1', min_value=8, max_value=64, step=8),
        activation='relu',
        input_shape=(input_shape,)
    ))
    model.add(Dense(
        units=hp.Int('units_2', min_value=8, max_value=64, step=8),
        activation='relu'
    ))
    model.add(Dense(
        units=hp.Int('units_3', min_value=8, max_value=64, step=8),
        activation='relu'
    ))
    model.add(Dense(1))
    model.compile(
        optimizer=tf.keras.optimizers.Adam(
            learning_rate=hp.Choice('learning_rate', values=[1e-2, 1e-3, 1e-4])
        ),
        loss='mse'
    )
    return model

內容解密:

  1. 超引數定義:使用 hp.Inthp.Choice 定義需要最佳化的超引數,包括神經元數量和學習率。
  2. 模型架構:建立一個具有多層 Dense 層的模型,並使用 ReLU 作為啟用函式。
  3. 編譯模型:使用 Adam 最佳化器和均方誤差(MSE)作為損失函式。
  4. 超引數最佳化:透過 Keras Tuner 的 Random Search 功能,自動搜尋最佳的超引陣列合。

TSLA 股價預測模型的建立與訓練

TSLA 股價預測模型使用了 Spark 進行資料預處理,並利用 Keras 建立神經網路模型進行訓練。

程式碼範例:TSLA 股價預測模型的建立

class TSLARegressor:
    def __init__(self):
        self.logger = logging.getLogger(__name__)
        self.spark = SparkSession.builder.appName("TSLA_Regression").getOrCreate()
        self.input_shape = None
        self.model = None

    def preprocess_data(self, file_path):
        # 資料預處理流程
        df = self.spark.read.csv(file_path, header=True, inferSchema=True)
        assembler = VectorAssembler(inputCols=['Open', 'High', 'Low', 'Volume'], outputCol='features')
        df = assembler.transform(df)
        scaler = StandardScaler(inputCol='features', outputCol='scaled_features', withMean=True, withStd=True)
        scaler_model = scaler.fit(df)
        df = scaler_model.transform(df)
        train_df, test_df = df.randomSplit([0.8, 0.2], seed=42)
        return train_df, test_df

內容解密:

  1. 初始化:建立 SparkSession 並初始化 logger。
  2. 資料預處理:讀取 CSV 檔案,使用 VectorAssembler 組合特徵欄位,並進行標準化處理。
  3. 資料分割:將資料分割為訓練集和測試集。

模型評估與預測

在模型訓練完成後,需要對模型進行評估和預測,以確認其效能。

程式碼範例:模型評估與預測

def evaluate_model(self, test_features, test_labels):
    test_loss = self.model.evaluate(test_features, test_labels)
    return test_loss

def predict_and_evaluate(self, test_features, test_labels):
    test_predictions = self.model.predict(test_features)
    r2_score_value = r2_score(test_labels, test_predictions)
    return r2_score_value

內容解密:

  1. 模型評估:使用測試資料評估模型的損失值。
  2. 預測與評估:進行預測並計算 R2 分數,以評估模型的預測能力。

在AWS上佈署與監控深度學習模型的關鍵步驟

在資料科學專案的生命週期中,將機器學習模型佈署到生產環境是一個至關重要的步驟。然而,這個過程經常面臨可擴充套件性、可靠性和可維護性等挑戰。Amazon Managed Workflows for Apache Airflow(MWAA)是一種由Amazon Web Services(AWS)提供的全託管服務,能夠簡化並自動化複雜工作流程的佈署和協調,包括模型佈署。

步驟1:設定環境

  1. 存取Amazon MWAA控制檯:使用您的AWS憑據登入到AWS管理控制檯,並搜尋“MWAA”以選擇“Managed Apache Airflow”。
  2. 建立新的MWAA環境:在Amazon MWAA儀錶板上,點選“Create environment”按鈕。
  3. 指定環境詳細資訊:輸入MWAA環境的唯一名稱,並選擇要使用的Apache Airflow版本。
  4. 指定S3儲存桶和DAG資料夾:輸入儲存DAG檔案的S3儲存桶名稱和資料夾路徑。
  5. 組態執行角色:選擇具有必要許可權的現有AWS Identity and Access Management(IAM)角色,或建立一個新角色。
  6. 組態網路:設定Virtual Private Cloud(VPC),以確保MWAA環境與其他AWS資源之間的互動安全。

VPC設定詳解

  • 導航到VPC服務:在AWS管理控制檯中搜尋“VPC”並選擇VPC。
  • 建立VPC:在VPC儀錶板上,點選“Create VPC”。
  • 選擇VPC組態:選擇具有單個或多個公有和私有子網的VPC,並指定CIDR區塊(例如,10.0.0.0/16)。

步驟2:開發DAG

開發一個Airflow DAG來協調佈署過程。定義任務、設定依賴關係並執行Python函式。確保DAG程式碼結構良好並包含所有必要的依賴項。

from datetime import datetime, timedelta
from airflow import DAG
from airflow.operators.python_operator import PythonOperator

default_args = {
    'owner': 'airflow',
    'depends_on_past': False,
    'start_date': datetime(2023, 3, 20),
    'retries': 1,
    'retry_delay': timedelta(minutes=5),
}

dag = DAG(
    'deep_learning_deployment',
    default_args=default_args,
    schedule_interval=timedelta(days=1),
)

def preprocess_data(**kwargs):
    # 資料預處理邏輯
    pass

def train_model(**kwargs):
    # 模型訓練邏輯
    pass

def deploy_model(**kwargs):
    # 模型佈署邏輯
    pass

preprocess_task = PythonOperator(
    task_id='preprocess_data',
    python_callable=preprocess_data,
    dag=dag,
)

train_task = PythonOperator(
    task_id='train_model',
    python_callable=train_model,
    dag=dag,
)

deploy_task = PythonOperator(
    task_id='deploy_model',
    python_callable=deploy_model,
    dag=dag,
)

preprocess_task >> train_task >> deploy_task

內容解密:

  1. default_args字典:定義了DAG的預設引數,例如所有者的名稱、是否依賴於過去的任務狀態、開始日期、重試次數和重試延遲時間。
  2. DAG物件:使用default_args和其他引數(如排程間隔)初始化DAG物件。
  3. PythonOperator任務:定義了三個任務,分別用於資料預處理、模型訓練和模型佈署。每個任務都呼叫一個Python函式。
  4. 任務依賴關係:使用>>運算子定義任務之間的依賴關係,確保任務按順序執行。

步驟3:上傳DAG到S3

將DAG檔案上傳到MWAA環境可存取的S3儲存桶中。這通常使用AWS CLI或AWS管理控制檯完成。

步驟4:組態MWAA環境

組態MWAA環境以包含上傳的DAG檔案,並指定任何額外的設定,如環境變數、連線和外掛。

步驟5:觸發DAG執行

手動或根據預定義的排程在Amazon MWAA環境中觸發DAG的執行。

步驟6:監控執行

從MWAA控制檯監控DAG的執行,跟蹤任務進度、檢視日誌並排除故障。

使用Plantuml圖表示範工作流程

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

title Keras Tuner 自動化超引數調優與模型佈署

package "機器學習流程" {
    package "資料處理" {
        component [資料收集] as collect
        component [資料清洗] as clean
        component [特徵工程] as feature
    }

    package "模型訓練" {
        component [模型選擇] as select
        component [超參數調優] as tune
        component [交叉驗證] as cv
    }

    package "評估部署" {
        component [模型評估] as eval
        component [模型部署] as deploy
        component [監控維護] as monitor
    }
}

collect --> clean : 原始資料
clean --> feature : 乾淨資料
feature --> select : 特徵向量
select --> tune : 基礎模型
tune --> cv : 最佳參數
cv --> eval : 訓練模型
eval --> deploy : 驗證模型
deploy --> monitor : 生產模型

note right of feature
  特徵工程包含:
  - 特徵選擇
  - 特徵轉換
  - 降維處理
end note

note right of eval
  評估指標:
  - 準確率/召回率
  - F1 Score
  - AUC-ROC
end note

@enduml

此圖示說明瞭使用Amazon MWAA佈署和監控深度學習模型的整體工作流程,從設定環境到監控執行的每個步驟都清晰地呈現出來。