Keras函式式API介紹
阿新 • • 發佈:2020-04-21
參考文獻:Géron,Aurélien. Hands-On Machine Learning with Scikit-Learn,Keras,and TensorFlow: Concepts,Tools,and Techniques to Build Intelligent Systems. O‘Reilly Media,2019.
Keras的Sequential順序模型可以快速搭建簡易的神經網路,同時Keras也提供函式式API(Functional API)用於定製各種不同型別的網格結構。
Concatenate
在搭建Wide & Deep神經網格的時候,需要進行層融合(concatenation)。圖中的融合層將Input層和hidden layer最後一層相加在一起。
input_ = keras.layers.Input(shape=X_train.shape[1:]) hidden1 = keras.layers.Dense(30,activation="relu")(input_) hidden2 = keras.layers.Dense(30,activation="relu")(hidden1) concat = keras.layers.concatenate([input_,hidden2]) output = keras.layers.Dense(1)(concat) model = keras.models.Model(inputs=[input_],outputs=[output])
Multi-inputs
可以將輸入特徵先分成多組(可以有重疊部分),讓它們分別通過神經網路中的不同路徑。
input_A = keras.layers.Input(shape=[5],name="wide_input") input_B = keras.layers.Input(shape=[6],name="deep_input") hidden1 = keras.layers.Dense(30,activation="relu")(input_B) hidden2 = keras.layers.Dense(30,activation="relu")(hidden1) concat = keras.layers.concatenate([input_A,hidden2]) output = keras.layers.Dense(1,name="output")(concat) model = keras.models.Model(inputs=[input_A,input_B],outputs=[output])
Multi-outputs
input_A = keras.layers.Input(shape=[5],name="main_output")(concat)
aux_output = keras.layers.Dense(1,name="aux_output")(hidden2)
model = keras.models.Model(inputs=[input_A,outputs=[output,aux_output])
每個output可以單獨設定損失函式
model.compile(loss=[“mse”,”mse”],loss_weights=[0.9,0.1],optimizer=“sgd”)
如果不設定的話,Keras預設使用相同的損失函式。訓練中,Keras會單獨計算兩個損失函式,相加一起得到作為最後的損失值。