寫在前面:
Keras建立神經網路比較輕便簡單,直接看第二部分程式碼示例就能明白。更高階複雜的功能,參見官網
一、Keras使用講解
Keras 是與TensorFlow一起使用的更高級別的作為後端的 API。新增層就像新增一行程式碼一樣簡單。在模型架構之後,使用一行程式碼,你可以編譯和擬合模型。之後,它可以用於預測。變數宣告、佔位符甚至會話都由 API 管理。
使用流程
1。定義模型的型別。Keras 提供了兩種型別的模型:序列和模型類 API。Keras 提供各種型別的神經網路層:
from
keras。model
import
Sequential
from
keras。layers
import
Dense
model
=
Sequential
()
2。在
model.add() 的幫助下將層新增到模型中
。依照 Keras 文件描述,
Keras 提供全連線層的選項(針對密集連線的神經網路)(難道還有不用Dense的網路?)
:
Dense( units, activation=None, use_bias=True,
kernel_initializer=‘glorot_uniform’, bias_initializer=‘zeros’,
kernel_regularizer=None, bias_regulrizer=None,
kernel_constraint=None, bias_constraint=None,
activity_regularizer=None
)
注意,密集層實現的操作:output=activation(dot(input,kernel)+bias),其中 activation 是元素啟用函式,是作為啟用引數傳遞的,kernel 是由該層建立的權重矩陣,bias 是由該層建立的偏置向量(僅在 use_bias 為 True 時適用)。activity_regularizer不知道指什麼,可參見官網,不常用。
3。
可以使用它來新增儘可能多的層,每個隱藏層都由前一層提供輸入。只需要為第一層指定輸入維度
# 這將新增全連線神經層,第一層輸入的X_in維度為13列,輸出為32列。
# 注意不是指該層神經元有32個,這是錯誤的解讀
model。add(Dense(32,input_dim=13,activation=‘relu’))
model。add(Dense(10,activation=‘sigmoid’))
4。 一旦模型被定義,需要選擇一個損失函式和最佳化器。
Keras 提供了多種損失函式(mean_squared_error、mean_absolute_error、mean_absolute_percentage_error、categorical_crossentropy 和最佳化器(sgd、RMSprop、Adagrad、Adadelta、Adam 等)
。損失函式和最佳化器確定後,可以使用 compile(self,optimizer,loss,metrics=None,sample_weight_mode=None)來配置學習過程:
model
。
compile
(
optimizer
=
‘rmsprop’
,
loss
=
‘categorical_crossentripy’
,
metrics
=
[
‘accuracy’
])
# 一般只用輸入最佳化器和損失函式即可,不用別的引數
5。
使用 fit 方法訓練模型
model。fit(data,labels,epochs=10,batch_size=32) #還可以輸入validation引數
6。 使用
predict 方法 predict(self,x,batch_size=32,verbose=0) 的幫助下進行預測
:
model。predict(test_data,batch_size=10)
batch_size和verbose引數非必須引數,通常不給這兩引數
verbose:是否日誌顯示,
0
為不在標準輸出流輸出日誌資訊,
1
為輸出進度條記錄,
2
為每個epoch輸出一行記錄
補充:Keras 提供選項來添加捲積層、池化層、迴圈層,甚至是區域性連線層。每種方法的詳細描述在 Keras 的官方文件中可以找到
:
https://
keras。io/models/sequent
ial/
。
二、Keras示例:多層感知機函式逼近
# 對於函式逼近,這裡的損失函式是 MSE。輸入應該歸一化,隱藏層是 ReLU,輸出層最好是 Sigmoid
# 上一個程式碼例子,使用Contrib。layers來構建神經網路層,相比於手動建立神經層,
# 其避免了分別為每層宣告權重和偏置,因而更加輕便。
# 此例使用Keras的API,使得工作進一步簡化。
# sklearn,可用來獲取資料集,預處理資料,並將其分成訓練集和測試集;
# pandas,可以用來分析資料集;
import
tensorflow
as
tf
from
sklearn
import
datasets
from
sklearn。model_selection
import
train_test_split
from
sklearn。preprocessing
import
MinMaxScaler
import
pandas
as
pd
import
seaborn
as
sns
import
numpy
as
np
from
keras。models
import
Sequential
from
keras。layers
import
Dense
,
Activation
from
sklearn。metrics
import
r2_score
,
mean_squared_error
# 載入資料集並建立 Pandas 資料幀來分析資料:
boston
=
datasets
。
load_boston
()
df
=
pd
。
DataFrame
(
boston
。
data
,
columns
=
boston
。
feature_names
)
df
[
‘target’
]
=
boston
。
target
# 繪出該資料幀
# print(df)
# split train and test data
X_train
,
X_test
,
Y_train
,
Y_test
=
train_test_split
(
df
[[
‘RM’
,
‘LSTAT’
,
‘PTRATIO’
]],
df
[[
‘target’
]],
test_size
=
0。3
,
random_state
=
0
)
# normalize data
X_train
=
MinMaxScaler
()
。
fit_transform
(
X_train
)
X_test
=
MinMaxScaler
()
。
fit_transform
(
X_test
)
Y_train
=
MinMaxScaler
()
。
fit_transform
(
Y_train
)
Y_test
=
MinMaxScaler
()
。
fit_transform
(
Y_test
)
# network parameters
m
=
len
(
X_train
)
n
=
3
n_hidden
=
20
# 並非hidden neurons,而是隱藏層的輸出的分類結果數為20。可以改成別的
n_classes
=
1
# 不是分類問題,所以最後一層輸出層輸出的分類結果只有一個類
# hyper para
batch_size
=
20
learning_rate
=
0。01
max_epoch
=
100
# 下面是本例子 Keras 相關語句作為後端的程式碼:
# ————————————————————————————————————————————————————————————
# 使用Keras建立一個單隱藏層的多層感知機模型
model
=
Sequential
()
model
。
add
(
Dense
(
n_hidden
,
input_dim
=
n
,
activation
=
‘relu’
))
# 和contrib。layers。fully_connected用法類似,需要輸入引數input,output和activation。
# 但是對layers。fully_connected,input是X_in,函式會自動捕捉其列數;對keras。Dense,input只是X_in的列數維度
model
。
add
(
Dense
(
1
,
activation
=
‘sigmoid’
))
# 對於第二層及後面的層,output不需要指定,會自動從上一層獲得
model
。
summary
()
# summarize the model
# 編譯該模型
model
。
compile
(
loss
=
‘mean_squared_error’
,
optimizer
=
‘adam’
)
# 應用該模型。在TF中,fit是個很有apply意味的詞
model
。
fit
(
X_train
,
Y_train
,
validation_data
=
(
X_test
,
Y_test
),
epochs
=
max_epoch
,
batch_size
=
batch_size
,
verbose
=
0
)
# 預測值,計算MSE和R2
Y_test_pred
=
model
。
predict
(
X_test
)
Y_train_pred
=
model
。
predict
(
X_train
)
R2
=
r2_score
(
Y_test
,
Y_test_pred
)
# R2決定係數(判斷擬合優度)
RMSE
=
mean_squared_error
(
Y_test
,
Y_test_pred
)
(
‘performance metrics R2:
{0:f}
, RMSE:
{1:f}
’
。
format
(
R2
,
RMSE
))
參考:
https://www。
cnblogs。com/q735613050/
p/8227446。html
https://
keras-cn。readthedocs。io
/en/latest/models/model/