深度學習筆記(4):使用Keras建立MLP和Linear Regression模型

Source: Artificial Intelligence on Medium

深度學習筆記(4):使用Keras建立MLP和Linear Regression模型

Keras支援兩種模型:
Sequential模型:單一輸入單一輸出,一層接著一層,不允許跨層
Functional API:共享神經層(Keras內建的有MLP、CNN、RNN)

MLP模型

https://colab.research.google.com/drive/1RjvgCt_QUPB7CQVTQ7DHL6qzfdfR1EYx

import numpy as npimport pandas as pdfrom keras.models import Sequentialfrom keras.layers import Densenp.random.seed(10) # 指定亂數種子# 載入糖尿病資料集df = pd.read_csv("./diabetes.csv")dataset = df.valuesnp.random.shuffle(dataset) # 使用亂數打亂資料# 分割成特徵資料和標籤資料X = dataset[:, 0:8]Y = dataset[:, 8]# 特徵標準化X -= X.mean(axis=0)X /= X.std(axis=0)# 分割訓練和測試資料集X_train, Y_train = X[:690], Y[:690] # 訓練資料前690筆X_test, Y_test = X[690:], Y[690:] # 測試資料後78筆# 定義模型model = Sequential()model.add(Dense(8, input_shape=(8,), activation="relu"))model.add(Dense(8, activation="relu"))model.add(Dense(1, activation="sigmoid"))# 編譯模型model.compile(loss="binary_crossentropy", optimizer="adam",metrics=["accuracy"])# 訓練模型model.fit(X_train, Y_train, epochs=10, batch_size=10, verbose=0)# 評估模型loss, accuracy = model.evaluate(X_train, Y_train)print("訓練資料集的準確度 = {:.2f}".format(accuracy))loss, accuracy = model.evaluate(X_test, Y_test)print("測試資料集的準確度 = {:.2f}".format(accuracy))# 測試資料集的預測值Y_pred = model.predict_classes(X_test, batch_size=10, verbose=0)print(Y_pred[0], Y_pred[1]) #第0筆不會得糖尿病、第1筆會得糖尿病

Linear Regression模型

K-fold交叉驗證:將資料集分割成2或多個分隔區,將每一個分隔區都一一作為驗證資料集,其餘的分割去則作為訓練資料集,為最常用的交叉驗證方法。可以讓我們使用資料集的所有樣本資料來訓練模型。

https://colab.research.google.com/drive/1P80VGHo3Z1pYgW_owwo-E3zWNFKHWZxG

#無交叉驗證import numpy as npimport pandas as pdfrom keras.models import Sequentialfrom keras.layers import Densenp.random.seed(7) # 指定亂數種子# 載入波士頓房屋資料集df = pd.read_csv("./boston_housing.csv")dataset = df.valuesnp.random.shuffle(dataset) # 使用亂數打亂資料# 分割成特徵資料和標籤資料X = dataset[:, 0:13]Y = dataset[:, 13]# 特徵標準化X -= X.mean(axis=0)X /= X.std(axis=0)# 分割訓練和測試資料集X_train, Y_train = X[:404], Y[:404] # 訓練資料前404筆X_test, Y_test = X[404:], Y[404:] # 測試資料後102筆# 定義模型model = Sequential()model.add(Dense(32, input_shape=(X_train.shape[1],), activation="relu"))model.add(Dense(32, activation="relu"))model.add(Dense(1))# 編譯模型model.compile(loss="mse", optimizer="adam",metrics=["mae"])# 訓練模型model.fit(X_train, Y_train, epochs=80, batch_size=16, verbose=0)# 使用測試資料評估模型mse, mae = model.evaluate(X_test, Y_test)print("MSE_test: ", mse)print("MAE_test: ", mae)