In the Keras, the user can design a model in two ways. Each method has its own use cases. These methods are:
We use the functional APIs usually when we’re working with more than two models simultaneously.
In this shot, we’ll discuss how a user can merge two separate models from a built in keras function; keras.layers.concatenate()
It is defined as follows:
merged_layer= keras.layers.concatenate(inputs, axix, name="")
inputs
: The layers of two models at which we want to merge these models.
axis
: The axis along which we want to concatenate the two layers.
name
: The name of concatenated/merged layer.
Let’s look at the steps to merge the two models.
import numpy as np import tensorflow as tf from tensorflow import keras from keras import layers from keras.layers import Input, Dense, concatenate from keras.models import Model from keras.utils import plot_model
Note that functional API is used in this job. However, a sequential API (using the
add()
function) would also have served the purpose.
# Model A a_ip_img = Input(shape=(32,32,1), name="Input_a") al_1 = Dense(64, activation = "relu",name ="a_layer_1")(a_ip_img) al_2 = Dense(128, activation="relu",name ="a_layer_2")(al_1) al_3 = Dense(64, activation="relu",name ="a_layer_3")(al_2) al_4 = Dense(32, activation="sigmoid",name ="a_output_layer")(al_3) #Model B b_ip_img = Input(shape=(32,32,1), name="Input_b") bl_1 = Dense(64, activation="relu",name ="b_layer_1")(b_ip_img) bl_2 = Dense(32, activation = "sigmoid",name ="b_output_layer")(bl_1)
concatenate()
function.#Merging model A and B a_b = concatenate([al_4,bl_2],name="concatenated_layer")
output_layer
. Here, another dense layer has been added before model generation.#Merging model A and B a_b = concatenate([al_4,bl_2],name="concatenated_layer") #Final Layer output_layer = Dense(16, activation = "sigmoid", name = "output_layer")(a_b) #Model Definition merged = Model(inputs=[(a_ip_img,b_ip_img)],outputs=[output_layer], name = "merged model")
We need to be careful when initializing the final model using the keras.Model()
function. We must mention the inputs of both models in the inputs
field.
keras.utils
or keras.Model.summary()
.#Model Details merged.summary() keras.utils.plot_model(merged, "output/architecture.png", show_shapes=True)
The final is attached below. We can also run this and play around with different inputs and parameters.
import numpy as np import tensorflow as tf from tensorflow import keras from keras import layers from tensorflow.keras.layers import Input, Dense, concatenate from tensorflow.keras.models import Model from tensorflow.keras.utils import plot_model # Model A a_ip_img = Input(shape=(32,32,1), name="Input_a") al_1 = Dense(64, activation = "relu",name ="a_layer_1")(a_ip_img) al_2 = Dense(128, activation="relu",name ="a_layer_2")(al_1) al_3 = Dense(64, activation="relu",name ="a_layer_3")(al_2) al_4 = Dense(32, activation="sigmoid",name ="a_output_layer")(al_3) #Model B b_ip_img = Input(shape=(32,32,1), name="Input_b") bl_1 = Dense(64, activation="relu",name ="b_layer_1")(b_ip_img) bl_2 = Dense(32, activation = "sigmoid",name ="b_output_layer")(bl_1) #Merging model A and B a_b = concatenate([al_4,bl_2],name="concatenated_layer") #Final Layer output_layer = Dense(16, activation = "sigmoid", name = "output_layer")(a_b) #Model Definition merged = Model(inputs=[(a_ip_img,b_ip_img)],outputs=[output_layer], name = "merged model") #Model Details merged.summary() keras.utils.plot_model(merged, "output/architecture.png", show_shapes=True)
RELATED TAGS
CONTRIBUTOR
View all Courses