Keras:基於python庫之Keras建立模型演算法來實現預測功能的詳細攻略
阿新 • • 發佈:2018-11-17
Keras:基於python庫之Keras建立模型演算法來實現預測功能的詳細攻略
思路分析
1、實現分類預測:通過Keras建立模型,最終得到的模型能進行兩種預測,一是判斷出類別,二是給出屬於相應類別概率。
(1)、在Keras中,可以利用predict_class()函式來完成,利用最終的模型預測新資料樣本的類別。但是,這個函式僅適用於Sequential模型,不適於使用功能式API開發的模型。
對三個例項預測:
# 建立一個新的分類模型 from keras.models import Sequential from keras.layers import Dense from sklearn.datasets.samples_generator import make_blobs from sklearn.preprocessing import MinMaxScaler # 生成二分類資料集 X, y = make_blobs(n_samples=100, centers=2, n_features=2, random_state=1) scalar = MinMaxScaler() scalar.fit(X) X = scalar.transform(X) # 定義並擬合最終模型 model = Sequential() model.add(Dense(4, input_dim=2, activation='relu')) model.add(Dense(4, activation='relu')) model.add(Dense(1, activation='sigmoid')) model.compile(loss='binary_crossentropy', optimizer='adam') model.fit(X, y, epochs=500, verbose=0) # 新的未知資料例項 Xnew, _ = make_blobs(n_samples=3, centers=2, n_features=2, random_state=1) Xnew = scalar.transform(Xnew) # 作出預測 ynew = model.predict_classes(Xnew) # 顯示輸入和輸出 for i in range(len(Xnew)): print("X=%s, Predicted=%s" % (Xnew[i], ynew[i]))
對一個例項預測:需要將它包裝變成一個數組的形式。以便傳給predict_classes()函式
from keras.models import Sequential from keras.layers import Dense from sklearn.datasets.samples_generator import make_blobs from sklearn.preprocessing import MinMaxScaler from numpy import array # 生成一個二分類資料集 X, y = make_blobs(n_samples=100, centers=2, n_features=2, random_state=1) scalar = MinMaxScaler() scalar.fit(X) X = scalar.transform(X) # 定義並擬合最終的新模型 model = Sequential() model.add(Dense(4, input_dim=2, activation='relu')) model.add(Dense(4, activation='relu')) model.add(Dense(1, activation='sigmoid')) model.compile(loss='binary_crossentropy', optimizer='adam') model.fit(X, y, epochs=500, verbose=0) # 未知的新例項 Xnew = array([[0.89337759, 0.65864154]]) # 作出預測 ynew = model.predict_classes(Xnew) # 顯示輸入輸出 print("X=%s, Predicted=%s" % (Xnew[0], ynew[0]))
程式碼實現
1、基於Keras設計的簡單二分類問題開發的神經網路模型案例
# 訓練一個最終分類的模型 from keras.models import Sequential from keras.layers import Dense from sklearn.datasets.samples_generator import make_blobs from sklearn.preprocessing import MinMaxScaler # 生成一個二分類問題的資料集 X, y = make_blobs(n_samples=100, centers=2, n_features=2, random_state=1) scalar = MinMaxScaler() scalar.fit(X) X = scalar.transform(X) # 定義並擬合模型 model = Sequential() model.add(Dense(4, input_dim=2, activation='relu')) model.add(Dense(4, activation='relu')) model.add(Dense(1, activation='sigmoid')) model.compile(loss='binary_crossentropy', optimizer='adam') model.fit(X, y, epochs=200, verbose=0)