高級神經(jīng)網(wǎng)絡(luò)API——Keras 簡介和一般工作流程
-
概述
- Keras 是一個(gè)高級神經(jīng)網(wǎng)絡(luò) API,它用 Python 語言編寫,能夠在 TensorFlow、Theano 或者 CNTK 等深度學(xué)習(xí)框架之上運(yùn)行。它的設(shè)計(jì)理念是簡單、快速地構(gòu)建和實(shí)驗(yàn)深度學(xué)習(xí)模型。Keras 提供了易于使用的接口,使得用戶可以專注于模型架構(gòu)的設(shè)計(jì)和訓(xùn)練,而不必深入了解底層復(fù)雜的計(jì)算細(xì)節(jié)。
- 如果使用Tansorflow框架的話,內(nèi)置了keras的API,可以在pyton中通過tansorflow.keras.{具體api}調(diào)用
-
核心組件
-
模型(Model)
- Sequential 模型:這是最常用的模型類型,用于構(gòu)建簡單的層堆疊式神經(jīng)網(wǎng)絡(luò)。例如,構(gòu)建一個(gè)簡單的多層感知機(jī)(MLP)用于圖像分類任務(wù):
pythonfrom keras.models import Sequential from keras.layers import Dense model = Sequential() model.add(Dense(128, activation='relu', input_shape=(784,))) model.add(Dense(10, activation='softmax'))
- 這里創(chuàng)建了一個(gè) Sequential 模型,首先添加了一個(gè)具有 128 個(gè)神經(jīng)元、激活函數(shù)為 ReLU 的全連接層(Dense 層),輸入形狀為 784(假設(shè)是將 28×28 的圖像數(shù)據(jù)展平后的長度),然后添加了一個(gè)具有 10 個(gè)神經(jīng)元、激活函數(shù)為 softmax 的全連接層用于分類。
- 函數(shù)式 API 模型:對于更復(fù)雜的模型架構(gòu),如具有多個(gè)輸入或輸出、共享層等情況,使用函數(shù)式 API 來構(gòu)建模型。例如,構(gòu)建一個(gè)簡單的多輸入模型:
pythonfrom keras.layers import Input, Dense from keras.models import Model input_1 = Input(shape=(32,)) input_2 = Input(shape=(64,)) x = Dense(16, activation='relu')(input_1) y = Dense(16, activation='relu')(input_2) output = Dense(1, activation='sigmoid')(x + y) model = Model(inputs=[input_1, input_2], outputs=output)
- 這里定義了兩個(gè)輸入層,分別對兩個(gè)輸入進(jìn)行處理后相加,再通過一個(gè)輸出層得到最終輸出,然后構(gòu)建了一個(gè)具有兩個(gè)輸入和一個(gè)輸出的模型。
-
層(Layer)
- Keras 有多種類型的層,如全連接層(Dense)、卷積層(Conv2D 等)、池化層(MaxPooling2D 等)、循環(huán)層(LSTM、GRU 等)。
- 全連接層(Dense):用于構(gòu)建多層感知機(jī)等模型。例如,
Dense(64, activation='relu')表示一個(gè)有 64 個(gè)神經(jīng)元、激活函數(shù)為 ReLU 的全連接層。神經(jīng)元之間全連接,即每個(gè)神經(jīng)元與上一層和下一層的所有神經(jīng)元都有連接。 - 卷積層(Conv2D):在處理圖像等具有網(wǎng)格結(jié)構(gòu)的數(shù)據(jù)時(shí)非常有用。例如,
Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1))表示一個(gè)卷積層,有 32 個(gè)卷積核,每個(gè)卷積核的大小為 3×3,激活函數(shù)為 ReLU,輸入形狀為 28×28×1(假設(shè)是單通道的灰度圖像)。卷積層通過卷積核在輸入數(shù)據(jù)上滑動(dòng)進(jìn)行卷積操作,提取圖像中的局部特征。 - 池化層(MaxPooling2D):用于對數(shù)據(jù)進(jìn)行下采樣,減少數(shù)據(jù)量的同時(shí)保留重要信息。例如,
MaxPooling2D((2, 2))表示一個(gè)池化層,它會在 2×2 的區(qū)域內(nèi)取最大值,將輸入數(shù)據(jù)的尺寸在高度和寬度方向上都縮小一半。
-
優(yōu)化器(Optimizer)
- Keras 提供了多種優(yōu)化器,如隨機(jī)梯度下降(SGD)、Adagrad、Adadelta、RMSProp 和 Adam 等。優(yōu)化器用于更新模型的權(quán)重,以最小化損失函數(shù)。例如,在編譯模型時(shí)可以選擇優(yōu)化器:
pythonmodel.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
- 這里選擇了 Adam 優(yōu)化器,損失函數(shù)為分類交叉熵(categorical_crossentropy),評估指標(biāo)為準(zhǔn)確率(accuracy)。不同的優(yōu)化器有不同的特點(diǎn),Adam 優(yōu)化器在很多情況下具有較好的收斂速度和性能。
-
損失函數(shù)(Loss Function)
- 損失函數(shù)用于衡量模型預(yù)測結(jié)果與真實(shí)值之間的差異程度。常見的損失函數(shù)有均方誤差(MSE)用于回歸任務(wù),分類交叉熵(Cross - Entropy)用于分類任務(wù)。例如,對于回歸任務(wù):
pythonmodel.compile(optimizer='adam', loss='mse', metrics=['mae'])
- 這里使用均方誤差作為損失函數(shù),平均絕對誤差(MAE)作為評估指標(biāo)。對于分類任務(wù),分類交叉熵能夠有效地衡量模型預(yù)測概率分布與真實(shí)標(biāo)簽概率分布之間的差異。
-
評估指標(biāo)(Metrics)
- 評估指標(biāo)用于衡量模型的性能。除了前面提到的準(zhǔn)確率(accuracy)和平均絕對誤差(MAE),還有如召回率(Recall)、精確率(Precision)、F1 - score 等用于分類任務(wù)的指標(biāo),以及決定系數(shù)(R - squared)等用于回歸任務(wù)的指標(biāo)。例如,在多分類任務(wù)中可以使用以下評估指標(biāo):
pythonfrom keras.metrics import Precision, Recall, F1Score model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=[Precision(), Recall(), F1Score()])
- 這里編譯模型時(shí)加入了精確率、召回率和 F1 - score 作為評估指標(biāo),這些指標(biāo)可以從不同角度評估模型在分類任務(wù)中的性能。
-
-
工作流程
- 數(shù)據(jù)準(zhǔn)備:首先需要準(zhǔn)備好訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù),通常要將數(shù)據(jù)進(jìn)行預(yù)處理,如歸一化、劃分?jǐn)?shù)據(jù)集等操作。例如,對于圖像數(shù)據(jù),可能需要將像素值歸一化到 [0, 1] 區(qū)間。
- 模型構(gòu)建:根據(jù)任務(wù)需求,使用 Sequential 模型或者函數(shù)式 API 構(gòu)建模型,選擇合適的層、激活函數(shù)等組件。
- 模型編譯:選擇優(yōu)化器、損失函數(shù)和評估指標(biāo)來編譯模型。這一步設(shè)置了模型訓(xùn)練的規(guī)則。
- 模型訓(xùn)練:使用訓(xùn)練數(shù)據(jù)對模型進(jìn)行訓(xùn)練,通常通過調(diào)用
model.fit()函數(shù)。例如,model.fit(x_train, y_train, epochs=10, batch_size=32)表示使用訓(xùn)練數(shù)據(jù)x_train和y_train對模型進(jìn)行 10 個(gè)輪次(epochs)的訓(xùn)練,每次訓(xùn)練使用 32 個(gè)樣本(batch_size)。 - 模型評估:使用測試數(shù)據(jù)對訓(xùn)練好的模型進(jìn)行評估,通過調(diào)用
model.evaluate()函數(shù),它會返回?fù)p失值和評估指標(biāo)的值,用于判斷模型的性能好壞。 - 模型預(yù)測:使用訓(xùn)練好的模型對新的數(shù)據(jù)進(jìn)行預(yù)測,通過調(diào)用
model.predict()函數(shù)。例如,y_pred = model.predict(x_test)會返回模型對測試數(shù)據(jù)x_test的預(yù)測結(jié)果。
浙公網(wǎng)安備 33010602011771號