1. 程式人生 > >Keras:基於python庫之Keras建立模型演算法來實現預測功能的詳細攻略

Keras:基於python庫之Keras建立模型演算法來實現預測功能的詳細攻略

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)