讀書筆記(四):深度學習基於Keras的Python實踐

ywangjiyl發表於2020-11-11

多分類例項:鳶尾花分類

針對鳶尾花分類問題建立神經網路的函式功能,建立一個簡單的全連線網路,包括一個輸入層(4個輸入神經元)、兩個隱藏層和一個輸出層,採用adam作為優化器,adam是一種用來替換隨機梯度下降的優化演算法, adam的調參相對簡單,預設引數可以處理大部分問題,並且使用在Keras中稱為分類交叉熵的對數損失函式

  • 評估模型: 確定模型的效能是否達到預定目標,黃金標準是k折交叉驗證,首先定義模型評估程式,這裡將定義為10,在分割資料之前對資料進行隨機亂序排列,然後就可以使用10折交叉驗證來評估已經定義完成的神經網路模型,並列印評估結果

迴歸問題例項:波士頓房價預測

迴歸問題是用來預測趨勢的一類問題,如價格預測、乘客人數預測等等,波士頓房價資料集包含14個特徵和506條資料

  • 這些特徵屬性的描述,可以發現輸入資料的度量單位不統一,需要對資料進行尺度調整,以便於提高模型的準確度,例項中使用Scikit-Learn中提供的資料集進行模型的訓練與評估

構建基準模型:首先建立一個簡單的神經網路模型,並將其作為模型改進的基準,每次模型的改進,都是以提高基準模型的效能為基礎的

#首先建立一個簡單的神經網路模型,並將其作為模型改進的基準,每次模型的改進,都是以提高基準模型的效能為基礎的,匯入所有需要的函式和物件開始
from sklearn import datasets
import numpy as np
from keras.models import Sequential
from keras.layers import Dense
from keras.wrappers.scikit_learn import KerasRegressor
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import KFold
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
from sklearn.model_selection import GridSearchCV

#匯入資料後應設定隨機數種子,以便於重複構建模型,並得到相同的結果
dataset = datasets.load_boston()

x = dataset.data
y = dataset.target

#設定隨機數種子
seed = 7
np.random.seed(seed)

#建立Keras模型後,使用包裝類來封裝模型,並通過Scikit-Learn評估模型,因為Scikit-Learn具有完善的評估模型的方法,可以使用少量的程式碼實現資料準備和對模型進行評估,Keras包裝類需要一個函式作為引數,所以必須定義並使用這個函式建立神經網路模型
#編譯模型的時候,採用Adam優化器,均方誤差MSE作為損失函式,同時採用相同的均方誤差來評估模型的效能,值越小代表模型效能越好,通常均方誤差為14,期待調優到10
#構建模型函式
def create_model(units_list=[13],optimizer='adam',init='normal'):
    #構建模型
    model = Sequential()

    #構建第一個隱藏層和輸入層
    units = units_list[0]
    model.add(Dense(units=units,activation='relu',input_dim=13,kernel_initializer=init))
    #構建更多的隱藏層
    for units in units_list[1:]:
        model.add(Dense(units = units,activation='relu',kernel_initializer=init))

    model.add(Dense(units=1,kernel_initializer=init))

    #編譯模型
    model.compile(loss = 'mean_squared_error',optimizer=optimizer)

    return model

相關文章