深度學習模型的效能高度依賴於超引數的設定。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
內容解密:
TSLAHyperModel類別:這個類別是用來定義模型架構的,並且它允許 Keras Tuner 對模型的超引數進行搜尋。build方法:這個方法是用來建立模型的。它使用 Keras Tuner 的hp.Int方法來定義超引數的搜尋空間。units_1和units_2:這兩個超引數是用來控制模型中 Dense 層的神經元數量的。它們的取值範圍分別是 32 到 256 和 16 到 128,步長分別是 32 和 16。activation='relu':這是 Dense 層的啟用函式,使用 ReLU 函式。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)
內容解密:
RandomSearch演算法:這是一種根據隨機搜尋的超引數調優演算法。objective='val_loss':這是用來指定評估模型的指標的,這裡使用驗證集上的損失值。max_trials=10:這是用來指定搜尋的最多次數的。executions_per_trial=3:這是用來指定每次搜尋中執行的次數的。directory和project_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)
內容解密:
get_best_hyperparameters:這是用來取得最佳超引數的方法。build(best_hps):這是用來建立使用最佳超引數的模型的方法。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
內容解密:
- 超引數定義:使用
hp.Int和hp.Choice定義需要最佳化的超引數,包括神經元數量和學習率。 - 模型架構:建立一個具有多層 Dense 層的模型,並使用 ReLU 作為啟用函式。
- 編譯模型:使用 Adam 最佳化器和均方誤差(MSE)作為損失函式。
- 超引數最佳化:透過 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
內容解密:
- 初始化:建立 SparkSession 並初始化 logger。
- 資料預處理:讀取 CSV 檔案,使用 VectorAssembler 組合特徵欄位,並進行標準化處理。
- 資料分割:將資料分割為訓練集和測試集。
模型評估與預測
在模型訓練完成後,需要對模型進行評估和預測,以確認其效能。
程式碼範例:模型評估與預測
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
內容解密:
- 模型評估:使用測試資料評估模型的損失值。
- 預測與評估:進行預測並計算 R2 分數,以評估模型的預測能力。
在AWS上佈署與監控深度學習模型的關鍵步驟
在資料科學專案的生命週期中,將機器學習模型佈署到生產環境是一個至關重要的步驟。然而,這個過程經常面臨可擴充套件性、可靠性和可維護性等挑戰。Amazon Managed Workflows for Apache Airflow(MWAA)是一種由Amazon Web Services(AWS)提供的全託管服務,能夠簡化並自動化複雜工作流程的佈署和協調,包括模型佈署。
步驟1:設定環境
- 存取Amazon MWAA控制檯:使用您的AWS憑據登入到AWS管理控制檯,並搜尋“MWAA”以選擇“Managed Apache Airflow”。
- 建立新的MWAA環境:在Amazon MWAA儀錶板上,點選“Create environment”按鈕。
- 指定環境詳細資訊:輸入MWAA環境的唯一名稱,並選擇要使用的Apache Airflow版本。
- 指定S3儲存桶和DAG資料夾:輸入儲存DAG檔案的S3儲存桶名稱和資料夾路徑。
- 組態執行角色:選擇具有必要許可權的現有AWS Identity and Access Management(IAM)角色,或建立一個新角色。
- 組態網路:設定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
內容解密:
default_args字典:定義了DAG的預設引數,例如所有者的名稱、是否依賴於過去的任務狀態、開始日期、重試次數和重試延遲時間。DAG物件:使用default_args和其他引數(如排程間隔)初始化DAG物件。PythonOperator任務:定義了三個任務,分別用於資料預處理、模型訓練和模型佈署。每個任務都呼叫一個Python函式。- 任務依賴關係:使用
>>運算子定義任務之間的依賴關係,確保任務按順序執行。
步驟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