本文主要介绍了几种使用keras.Model API构建深度网络模型的基本方法。
1. 简单顺序模型
模型由输入层、隐藏层、和输出层顺序连接构成(如图1所示)
图1. 简单顺序模型示意图
(1) 定义模型结构
def build_model(X_train):
input_layer = keras.layers.Input(shape=X_train.shape[1:])
hidden1_layer = keras.layers.Dense(30, activation=‘ReLU’)(input_layer)
hidden2_layer = keras.layers.Dense(30, activation=‘linear’)(hidden1_layer)
output_layer = keras.layers.Dense(1)(hidden2_layer)
model = keras.Model(inputs=input_layer, outputs=output_layer)
return model
(2) 建模训练
model = build_model(X_train)
model.compile(loss=‘mse’, optimizer=keras.optimizers.SGD(lr=1e-3))
model.fit(X_train, Y_train)
eval = model.evaluate(X_val, Y_val)
Y_pred = model.pred(X_test)
2. 短路径顺序模型
模型由输入层、隐藏层、输出层和短路径连接构成(如图2所示)
图2. 短路径顺序模型示意图
(1) 定义模型结构(注意红色字体部分)
def build_model(X_train):
input_layer = keras.layers.Input(shape=X_train.shape[1:])
hidden1_layer = keras.layers.Dense(30, activation=‘ReLU’)(input_layer)
hidden2_layer = keras.layers.Dense(30, activation=‘linear’)(hidden1_layer)
concat_layer = keras.layers.Concatenate()([input_layer, hidden2_layer])
output_layer = keras.layers.Dense(1)(concat_layer)
model = keras.Model(inputs=input_layer, outputs=output_layer)
return model
(2) 建模训练
model = build_model(X_train)
model.compile(loss=‘mse’, optimizer=keras.optimizers.SGD(lr=1e-3))
model.fit(X_train, Y_train)
eval = model.evaluate(X_val, Y_val)
Y_pred = model.pred(X_test)
3. 多输入顺序模型
模型由两个及以上输入层、隐藏层、输出层和短路径连接构成(如图3所示)
图3. 多输入顺序模型示意图
(1) 定义模型结构(注意红色字体部分)
def build_model(X_train1, X_train2):
input1_layer = keras.layers.Input(shape=X_train1.shape[1:])
input2_layer = keras.layers.Input(shape=X_train2.shape[1:])
hidden1_layer = keras.layers.Dense(30, activation=‘ReLU’)(input1_layer)
hidden2_layer = keras.layers.Dense(30, activation=‘linear’)(hidden1_layer)
concat_layer = keras.layers.Concatenate()([input2_layer, hidden2_layer])
output_layer = keras.layers.Dense(1)(concat_layer)
model = keras.Model(inputs=[input1_layer, input2_layer], outputs=output_layer)
return model
(2) 建模训练(注意红色字体部分)
model = build_model(X_train1, X_train2)
model.compile(loss=‘mse’, optimizer=keras.optimizers.SGD(lr=1e-3))
history = model.fit((X_train1, X_train2), Y_train)
eval = model.evaluate((X_val1, X_val2), Y_val)
Y_pred = model.pred((X_test1, X_test2))
4. 多输入多输出模型
模型由两个及以上输入层、隐藏层、两个及以上输出层连接构成(如图4所示)
图4. 多输入多输出模型示意图
(1) 定义模型结构(注意红色字体部分)
def build_model(X_train1, X_train2):
input1_layer = keras.layers.Input(shape=X_train1.shape[1:])
input2_layer = keras.layers.Input(shape=X_train2.shape[1:])
hidden1_layer = keras.layers.Dense(30, activation=‘ReLU’)(input1_layer)
hidden2_layer = keras.layers.Dense(30, activation=‘linear’)(hidden1_layer)
concat_layer = keras.layers.Concatenate()([input2_layer, hidden2_layer])
output1_layer = keras.layers.Dense(1, name=‘main_output’)(concat_layer)
ouput2_layer = keras.layers.Dense(1, name=‘aux_output)(hidden2_layer)
model = keras.Model(inputs=[input1_layer, input2_layer], outputs=[output1_layer, output2_layer])
return model
(2) 建模训练(注意红色字体部分)
model = build_model(X_train1, X_train2)
model.compile(loss=[‘mse’, ‘mse’], loss_weight=[0.9, 0.1], optimizer=keras.optimizers.SGD(lr=1e-3))
history = model.fit((X_train1, X_train2), (Y_train1, Y_train2))
eval = model.evaluate((X_val1, X_val2), (Y_val1, Y_val2))
Y_pred1, Y_pred2 = model.pred((X_test1, X_test2))
参考文献:
[1] A GéRon. Hands-on machine learning with Scikit-Learn and TensorFlow : concepts, tools, and techniques to build intelligent systems. 2017.